我搜索周围,并试图覆盖“for”关键字,但我什么也没找到。 我想类似的东西:覆盖Ruby中的“for”关键字。可能吗?
def for("maybe_arguments_go_here")
print "Hello from function for!"
end
for i in 1..3
print "Hello from for"
end
我搜索周围,并试图覆盖“for”关键字,但我什么也没找到。 我想类似的东西:覆盖Ruby中的“for”关键字。可能吗?
def for("maybe_arguments_go_here")
print "Hello from function for!"
end
for i in 1..3
print "Hello from for"
end
你不能覆盖关键字本身,但你可以做的一件事是说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
我不认为这是压倒一切“的关键词是任何语言选项,您可以覆盖的方法和运营商(运营商本身在现代语言的方法)只, for
是Ruby中的关键字。但是你仍然可以做这样的事情如下:
def loop(range)
range.each{|i| yield i}
end
loop 1..6 do |x|
#do something with x
end
你写的代码有错误 – 2009-12-05 12:39:12
hell ya ...对不起,我重申了整个帖子...... – khelll 2009-12-05 13:35:21
如果你给的方法的显式接收器,将工作,但您将无法使用该方法没有明确地把自己之前。
这会工作:
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有的上面重新定义的关键字的评论是一个巨大的,不,不,当然,如果我们”只是试验和乐趣,然后去做!
你想用这个完成什么?你想如何改变'for'的行为? – 2009-12-05 12:12:54
我只是试验语言的内部结构 – 2009-12-05 12:15:55
有一个原因关键字被称为关键字。但是你总是可以获得Ruby源代码并重新定义'for'的工作方式,或者将其称为别的东西,然后重新编译Ruby。 – Zano 2009-12-05 12:21:37