我搜索并尝试覆盖“for”关键字,但我什么也没找到。 我正在尝试这样的事情:
def for("maybe_arguments_go_here")
print "Hello from function for!"
end
for i in 1..3
print "Hello from for"
end
答案 0 :(得分: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
答案 1 :(得分:3)
我不认为'覆盖'关键字是任何语言的选项,你可以只覆盖方法和运算符(运算符本身就是现代语言中的方法),for
是Ruby中的关键字。但是,您仍然可以执行以下操作:
def loop(range)
range.each{|i| yield i}
end
loop 1..6 do |x|
#do something with x
end
答案 2 :(得分:1)
如果你给这个方法一个明确的接收器它会起作用,但你不能在没有明确地将self放在它之前的情况下使用该方法。
这样可行:
def self.for(arg)
arg + 1
end
self.for(1)
=> 2
OR
class Aa
def c
self.for(1)
end
def for(arg)
arg + 1
end
end
b = Aa.new
b.for(4)
=> 5
但是,我同意khell和上面的一些评论,重新定义关键字是一个巨大的不,当然,如果我们只是尝试和玩乐,那就去吧!