在Ruby中,为什么不会`foo = true除非定义?(foo)`赋值?

这里发生了什么?两种形式的“除非”之间的微妙区别是什么?
> irb(main):001:0> foo = true unless defined?(foo)
=> nil 
irb(main):002:0> unless defined?(fooo) ; fooo = false ; end
=> false

谢谢

解决方法

显然,ruby在解析时创建局部变量,将它们设置为nilso它被定义,无论代码是否被执行,这都是完成的.

代码在第一行进行评估时,它不会执行赋值部分,因为foo设置为nil.在第二行,因为fooo还没有解析,定义?返回nil让块内的代码执行并分配fooo.

举个例子你可以试试这个:

if false  
  foo = 43  
end  
defined? foo  
=> "local-variable"

这是从ruby-forum上的论坛post.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...