覆盖Ruby中的"for"关键字.可能吗?

Jon*_*ero 1 ruby overriding metaprogramming

我搜索并尝试覆盖"for"关键字,但我什么也没找到.我正在尝试这样的事情:

def for("maybe_arguments_go_here")
  print "Hello from function for!"
end

for i in 1..3
  print "Hello from for"
end 
Run Code Online (Sandbox Code Playgroud)

Mar*_*llo 6

你不能覆盖关键字本身,但你可以做的一件事是说for你自己的类是什么.内部for调用each,所以以下技巧将起作用:

class MyFor
  def initialize(iterable)
    @iterable = iterable
  end

  def each
    @iterable.each do |x|
      puts "hello from for!"
      yield x
    end
  end
end

# convenient constructor
module Kernel
  def my(x)
    MyFor.new(x)
  end
end

for i in my(1..3)
  puts "my for yielded #{x}"
end
Run Code Online (Sandbox Code Playgroud)