[#39863] forループの速度 — Masahiro Sato <msato@...>

15 messages 2004/07/20

[#39868] イテレータとfor文 — OOTANI TAKASHI <otn@...5.so-net.ne.jp>

大谷と申します。

31 messages 2004/07/20
[#39886] Re: イテレータとfor文 — Tietew <tietew-ml-ruby-list@...> 2004/07/21

[ruby-list:39856] 直接関係のない配列の有無が、ある配列の値に影響する不具合

From: "Hisashi Yahata" <yahatah@...>
Date: 2004-07-17 03:13:42 UTC
List: ruby-list #39856
はじめまして。Rubyを最近勉強しはじめた者ですが、プログラミング中に次の問題に
直面しました。
下記のスクリプトは、発生した問題箇所だけを抽出し、問題点を浮き彫りにしていま
す。
Perlで記述した内容をRubyに変換したのですが、一度$bne[$m]に納めた内容を再出力
するときに、$ange[$m] = $angという関係のないはずのスクリプトの有無に影響され
ます。これを記述しなければ、正常に出力されるのに対し、記述すると、その値は、
$angに置き換わっています。
論理的には、間違いない記述をしたつもりでいるだけに、不具合の発見に多くの時間
を要し、結局はRubyの利用を不安にさせます。
このような状況が発生する理由を教えてください。よろしくお願いします。

質問の出し方がわかりません。間違っていましたらご容赦ください。

矢幡

# 直接関係のない$ange[$m] = $angの有無により、$bne[$m]の内容に影響する不具
合

def branch
  $bnum=2
  $bnum.times do
    $m +=1
    $bne[$m] = $bnp
    print "m=", $m, "  bnp=", $bnp,"\n"
    $ange[$m] = $ang #@@@ この行をつけるとなぜ不具合になる
  end
end

def draw
  for $m in 1..$m_last
    $bnp = $bne[$m]
    print "draw: m=",$m," bnp=",$bnp,"\n"
  end
end

$bne,$sbe,$ange=[[]]*3

$agemax = 2
$m = 0
$bne[0] = 1
$bnp = 0
$m_to = 0
$m_from = 0
$age = 0
#$ang=10

branch     #

while ($age < $agemax)
  $m_from = $m_to + 1
  $m_to = $m
  $age += 1
  for $bnp in $m_from..$m_to
    branch          #計算された枝数だけ枝を描く
  end
end

$m_last = $m
draw


In This Thread

Prev Next