当方法名和块名相同时会发生什么?
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
我试图理解以下行为:
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