我从 Ruby 开始,在制作一些测试样本时,我偶然发现了代码中的一个错误,我不明白它为什么会发生。
该代码假装测试变量 finn 是否已定义?(),如果已定义,则将其递增。如果未定义,则将其定义为值 0(零)。当代码抛出错误时,我开始将它分解成小块并运行它,以更好地追踪错误的来源。代码在 IRB irb 0.9.5(05/04/13) 中运行,使用 ruby 1.9.1p378
首先,我证明变量 finn 尚未定义,一切正常:
?> finn
NameError: undefined local variable or method `finn' for main:Object
from (irb):134
from /home/paulo/.rvm/rubies/ruby-1.9.1-p378/bin/irb:15:in `<main>'
>>
然后我证明以下内联条件按预期执行,一切正常:
?> ((defined?(finn)) ? (finn+1):(0))
=> 0
现在是引发错误的代码:
?> finn=((defined?(finn)) ? (finn+1):(0))
NoMethodError: undefined method `+' for nil:NilClass
from (irb):143
from /home/paulo/.rvm/rubies/ruby-1.9.1-p378/bin/irb:15:in `<main>'
我期望代码不会抛出任何错误,并且在执行变量 finn 后将定义为第一个值 0(零)。但是相反,代码抛出了错误,并且 finn 被定义但值为 nil。
>> finn
=> nil
错误可能来自哪里?!?为什么 inline-condition 单独工作,但在用于 finn 分配时不工作?
任何帮助表示赞赏:)