【发布时间】:2023-03-24 15:36:02
【问题描述】:
我编写了一个秘密圣诞老人程序(ala Ruby Quiz...ish),但偶尔在程序运行时,我会收到错误消息。 统计:如果底池中有 10 个名字,错误出现的概率约为 5%。如果底池中有 100 个名字,则不到 1%。这是在 bash 中进行 1000 次试验。我已经确定礼物数组在某个时候为零,但我不确定为什么或如何避免它。 提供代码...
0.upto($lname.length-1).each do |i|
j = rand($giftlname.length) # should be less each time.
while $giftlname[j] == $lname[i] # redo random if it picks same person
if $lname[i] == $lname.last # if random gives same output again, means person is left with himself; needs to switch with someone
$giftfname[j], $fname[i] = $giftfname[i], $fname[j]
$giftlname[j], $lname[i] = $giftlname[i], $lname[j]
$giftemail[j], $email[i] = $giftemail[i], $email[j]
else
j = rand($giftlname.length)
end
end
$santas.push('Santa ' + $fname[i] + ' ' + $lname[i] + ' sends gift to ' + $giftfname[j] + ' ' + $giftlname[j] + ' at ' + '<' + $giftemail[j] + '>.') #Error here, something is sometimes nil
$giftfname.delete_at(j)
$giftlname.delete_at(j)
$giftemail.delete_at(j)
end
谢谢!
【问题讨论】:
-
只是出于好奇,为什么在所有变量名前都使用 $?在 Ruby 中,这使它们成为全局变量,这几乎不是您想要的。
-
我本来是把它写成一个新的方法,是为了避免把所有的变量都带进去。后来发现不需要用的时候,我把这个方法去掉,做成一个平面程序递归......但我从来没有拿出 $s。
-
在 ruby 中,您应该从不需要使用全局变量。我会在没有任何 $ 的情况下首先重写它。红宝石的部分美丽之处在于到处都没有“$”。 (我什至不确定为什么它甚至不再受支持)