我想了解以下行为:
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
是执行代码块的唯一方法吗?
答案 0 :(得分:5)
由于该方法不使用[block],因此它打印默认" In Method"。是不是?
不,你错了。它正在打印"In Method"
,因为您定义了这样做的方法。
yield是执行代码块的唯一方法吗?
不,你可以使用&
接受一个块作为proc,并在其上调用call
。
def foo &block
block.call(arguments)
end
答案 1 :(得分:1)
正如sawa所描述的那样"In Method"
打印为方法中定义的原因。如果要将参数传递给方法,则必须初始化参数以接受参数。
像这样......
def test message
puts "I am in method"
puts message
end
test("In Block")
注意:方法不接受块作为参数。请通过此参考链接,通过示例了解所有语法: Ruby Programming/Syntax/Method Calls