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

时间:2015-02-05 06:52:14

标签: ruby codeblocks yield

我想了解以下行为:

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是执行代码块的唯一方法吗?

2 个答案:

答案 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