Ruby 向调用者块屈服的惯用方式是什么';打电话的人是谁?
如果一个人想屈服于呼叫者的呼叫者,该如何继续?我得出了以下结论:Ruby 向调用者块屈服的惯用方式是什么';打电话的人是谁?,ruby,Ruby,如果一个人想屈服于呼叫者的呼叫者,该如何继续?我得出了以下结论: def method1(param) method2(param) { |x| yield x if block_given? } end def method2(param) yield(param) if block_given? # Can I yield from here end method1("String") { |x| puts x } # to here in a more elegant wa
def method1(param)
method2(param) { |x| yield x if block_given? }
end
def method2(param)
yield(param) if block_given? # Can I yield from here
end
method1("String") { |x| puts x } # to here in a more elegant way?
只需显式地传递块
def method1(param, &block)
method2(param, &block)
end
def method2(param)
yield param if block_given?
end
method1("String") { |x| puts x } # >> String
只需显式地传递块
def method1(param, &block)
method2(param, &block)
end
def method2(param)
yield param if block_given?
end
method1("String") { |x| puts x } # >> String
一种方法是在第一种方法中不使用收益率:
def method1(param, &block)
method2(param, &block)
end
def method2 param
yield param if block_given?
end
一元符号AND表示方法参数列表中的“块槽”。当您传递一个块时,您可以通过将&
放在最终参数名称的正前方来访问传递的块。它可以以同样的方式传递给其他方法
您可以在这里看到有关
&
的许多详细信息:一种方法是在第一种方法中不使用收益率:
def method1(param, &block)
method2(param, &block)
end
def method2 param
yield param if block_given?
end
一元符号AND表示方法参数列表中的“块槽”。当您传递一个块时,您可以通过将&
放在最终参数名称的正前方来访问传递的块。它可以以同样的方式传递给其他方法
你可以在这里看到很多关于
&
的细节:我个人并不讨厌显式块,但阿法伊克正统说方法2
应该放弃&block
的论点,如果给出块,就做出让步?
@tokland:同意。更新了帖子,为什么这更正统?如果它包含了一个动机,说明为什么这个特定的公式是好的,答案会更好。@N.N.我没有数字要显示,但是请检查经验丰富的Ruby程序员编写的代码,您会发现这是一种常见的做法。基本原理可能是这样的:1)yield
比block.call
更惯用(这就是为什么合成糖首先存在的原因)。2) 如果block
没有这样使用,那么将其作为参数传递是没有意义的(所有Ruby方法都可以接受一个块,不管是否有块参数)。奇怪的是,他没有讨论这件事。我个人也不讨厌显式块,但AFAIK正统说method2
应该放弃参数&block
,如果给定块,则做出让步?
@tokland:同意。更新了帖子,为什么这更正统?如果它包含了一个动机,说明为什么这个特定的公式是好的,答案会更好。@N.N.我没有数字要显示,但是请检查经验丰富的Ruby程序员编写的代码,您会发现这是一种常见的做法。基本原理可能是这样的:1)yield
比block.call
更惯用(这就是为什么合成糖首先存在的原因)。2) 如果block
没有这样使用,那么将其作为参数传递是没有意义的(所有Ruby方法都可以接受一个块,不管是否有块参数)。奇怪的是,他没有讨论这件事。也检查