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

What happens when method name and block name are same?

我试图理解以下行为:

def test
  puts "In Method"
end

test
#=> In Method

test {puts "In Block" }
#=> In Method

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

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

因为 已经向您描述了为什么 "In Method" 按照其在方法中定义的方式打印。如果要将参数传递给方法,则必须初始化参数以接受参数。

像这样..

def test message
  puts "I am in method"
  puts message
end

test("In Block")

注意: 方法不接受块作为参数。请仔细阅读此参考资料 link,它可以让您通过示例理解所有语法: Ruby Programming/Syntax/Method Calls

Since the method does not use the [block], it is printing the default "In Method". Is it right?

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

Is yield the only way to execute a code block?

不,您可以使用 & 接受块作为过程,然后对其调用 call

def foo &block
  block.call(arguments)
end