由于匿名块和散列块看起来大致相同。我正在玩它。我做了以下一些严肃的观察:
{}.class
#=> Hash
好的,很酷。空块被认为是Hash
。
print{}.class
#=> NilClass
puts {}.class
#=> NilClass
现在为什么上面的代码显示相同NilClass
,但下面的代码又显示了Hash
?
puts ({}.class)
#Hash
#=> nil
print({}.class)
#Hash=> nil
任何人都可以在这里帮助我了解上面发生了什么吗?
我完全不同意@Lindydancer的观点
您将如何解释以下几行:
print {}.class
#NilClass
print [].class
#Array=> nil
print (1..2).class
#Range=> nil
为什么与下面的print [].class
和不一样print (1..2).class
?
编辑
当local variable
和method
调用发生歧义时,Ruby 会抛出一个关于以下事实的错误:
name
#NameError: undefined local variable or method `name' for main:Object
# from (irb):1
# from C:/Ruby193/bin/irb:12:in `<main>'
现在情况不一样了(因为或块{}
之间也有歧义)。由于 IRB 在这里也不确定它是 a还是. 那么为什么当 IRB 遇到时错误没有抛出?empty code block
Hash
empty block
Hash
print {}.class
{}.class