3.times {puts "Hello"}
Hello
Hello
Hello
我们把它理解为times
是Integer
类中的函数,接受block
作为参数。
我试图挖掘并发现它并不那么简单。
如果它是times
是在一个方法调用的函数,并且括号中的情况下是可选的我试图用它来验证:
3.times({puts "Hello"})
扔明显的错误:
SyntaxError: (irb):3: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '(' 3.times({puts "Hello"}) ^ (irb):3: syntax error, unexpected '}', expecting end-of-input 3.times({puts "Hello"}) ^ from /home/ashish/.rvm/rubies/ruby-2.0.0-p353/bin/irb:12:in `'
进一步调查:
a = 3.times
puts a.class
输出Enumerator
th意味着3X是一个Enumerator
类对象。
有人可以用这背后的确切概念来解释整个事情吗?
块“参数”是句法糖;如果你在parens里面做,它会试图解析为一个散列。 –
如果我们在这种情况下尝试“3.times(do puts”hello“end)”,那么为什么它会试图将其解析为散列值? –
'3.times(&proc {puts“Hello”})' –