Ruby如何区分|n|
在函数yield的情况下“ Kim”和在函数调用的情况下“ Eric”的代码块?
道歉,如果这很明显-我真的看不到|n|
带有function(arg)调用的代码块中的变量到底如何影响函数内部的yield调用?
def yield_name(name)
puts "In the method! Let's yield..."
yield("Kim")
puts "... now in between the yields!"
yield(name)
puts "Block complete! Back in the method."
end
>>> yield_name("Eric") { |n| puts "My name is #{n}." }
In the method! Let's yield... My name is Kim. ... now in between the yields! My name is Eric. Block complete! Back in the method.
就我所理解的代码块而言,它的意思是:“对于每个参数,在屏幕上显示“我的名字是#{that参数}”。Ruby如何将“ Kim”传递给“那个参数”,从而显示“ My name is Kim”。而不只是“金”?谢谢。
- - - - - - - - - - - 编辑
这是一个不太容易混淆的示例:
def double(parameter)
yield parameter
yield 7
end
当我调用时:
>>> double(3) { |n| puts "how? #{n * 2}" }
我得到:
how? 6 #<-- relative to function call(arg) how? 14 #<-- relative to internal functions yield call(arg)
那么Ruby如何知道在puts语句中使用yield 7?
据我了解的代码块,它显示为“对于每个参数,将其显示在屏幕上“我的名字是#{那个参数}”。
不。从字面上看,它读取“将参数'Eric'yield_name
传递给方法并传递此块”。您将一个块传递给方法这一事实并没有任何意义。该方法可以简单地不调用它(也称为“屈服”)。因此,在不知道该方法的实现的情况下,您无法对块调用次数或提供的参数值进行任何假设。
在这种情况下,我们确实知道实现
def yield_name(name)
puts "In the method! Let's yield..."
yield("Kim")
puts "... now in between the yields!"
yield(name)
puts "Block complete! Back in the method."
end
在这里,我们看到每个调用都会yield_name
调用其块两次。首先,使用静态值("Kim"
)。第二次,它只是中继其参数name
。如果此处没有yield
语句,则您提供的块将被完全忽略(因此,将不会打印任何内容)。但是我们确实两次触发了该块,并在输出中看到了两行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句