我有这门课:
class MyArray
attr_accessor :data
def initialize(my_object = nil)
@data = Array[*my_object]
end
def <<(y)
@data << y
end
def each
@data.each
end
end
Run Code Online (Sandbox Code Playgroud)
我是这样使用它的
Run Code Online (Sandbox Code Playgroud)subject = MyArray.new([2, 5, 3]) d = [] subject.each { |i| d << i }
问题是,它甚至不会通过 -subject.each- 迭代一次。我应该怎么做才能从数组中返回“每个”值作为方法返回值?如何返回迭代器本身?
我试过这个,但它也不起作用:
Run Code Online (Sandbox Code Playgroud)def each [2,5,3].each end
感谢“meagar”和“Erik Allik”,我们有了正确的答案:(只有“def each”方法发生了变化)
class MyArray
attr_accessor :data
def initialize(my_object = nil)
@data = Array[*my_object]
end
def <<(y)
@data << y
end
def each(&block)
@data.each(&block)
end
end
Run Code Online (Sandbox Code Playgroud)
问题是each {block}实际上是在调用each数组并将块参数传递给方法。您的块参数被忽略。
如果你想让它工作,你需要将块转发到你的嵌套each调用中:
class Test
def each(&block)
[1, 2, 3].each(&block)
end
end
Test.new.each do |i|
puts i
end
Run Code Online (Sandbox Code Playgroud)
如果你想返回一个迭代器,你可以自由地这样做,但你必须调用each 那个迭代器,并给它块:
class Test
def each
[1, 2, 3].each
end
end
Test.new.each.each do |i|
puts i
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1430 次 |
| 最近记录: |