当方法名称和块名称相同时会发生什么?

Zac*_*ack 1 ruby yield codeblocks

我想了解以下行为:

def test
  puts "In Method"
end

test
#=> In Method

test {puts "In Block" }
#=> In Method
Run Code Online (Sandbox Code Playgroud)

我的解释是,这test是一种方法,我{puts "In Block"}作为一个参数传递给这个方法.由于该方法不使用参数,因此它将打印默认值"In Method".这样对吗?

我们如何区分块和方法调用?可能test {puts "In Block"}也被解释为一个块?是yield执行代码块的唯一方法吗?

saw*_*awa 5

由于该方法不使用[block],因此它将打印默认的"In Method".这样对吗?

不,你错了.它是打印的,"In Method"因为您定义了这样做的方法.

yield是执行代码块的唯一方法吗?

不,你可以接受一个块作为proc使用&,并调用call它.

def foo &block
  block.call(arguments)
end
Run Code Online (Sandbox Code Playgroud)