【发布时间】:2014-08-01 03:18:49
【问题描述】:
以下是扫描示例:
"abcdeabcabc".scan("a")
所以它返回一个由 3 个 a 组成的数组。另一个扫描示例:
"abcdeabcabc".scan("a") {|x| puts x}
它只是输出每个“a”,但仍然输出一个数组,而这一次它实际上是它返回的原始字符串。
所以从文档和上面的行为来看,扫描要么返回一个数组(没有给出块),要么返回原始字符串,在该字符串之前会发生一些副作用。关键是这两种情况都会返回一些东西。
那么如果我在块内放置一个“yield”会发生什么?什么会被退回?或者,没有? 返回值的类型是什么?
"abcdeabcabc".scan("a") {|x| yield x}
上述方法不起作用,因为 Ruby 抱怨没有给出块。这对我来说有点道理。但是,如果它是类方法的一部分,例如,自我实现的“每个”,那么以下工作:
class Test
def my_each
"abcdeabcabc".scan("a") {|x| yield x}
end
end
# => :my_each
t = Test.new
# => #<Test:0x007ff00a8d79b0>
t.my_each {|x| puts "so this is #{x}"}
# it works. Outpus 3 a's then return the original string.
那么,Test类的my_each方法的返回值是多少呢?那是产量清单还是什么?但正如之前讨论的 "abcdeabcabc".scan("a") {|x| Ruby 会抱怨 yield x} 段,直到给出一个块。内部发生了什么将 my_each 块提供给 my_each 实现内部的段?
【问题讨论】: