将方法添加到对象的CPU效率最高的方法是什么?
这就是我现在所拥有的,
@pmacio.define_method(:waitfor) do |*args|
c = @pmacio.read(1)
until args[0] =~ c do
c = @pmacio.read(1)
end
end
调用如:
@pmacio.waitfor(/\cF|\cG/)
但还有其他方法:define_singleton_method
等。此方法在基于GNOME 2.0的应用程序的空闲循环中调用,并且需要尽可能提高CPU效率。
编辑:接受的答案如下:
def @pmacio.waitfor(c)
....
end
答案 0 :(得分:3)
您的代码在实例变量@pmacio
的值上定义了一个方法,而不是实例变量本身,它不是一个对象。
假设
h = { :a => 1 }
@pmacio = h
然后
def @pmacio.my_method
"meow"
end
#=> :my_method
所以现在
@pmacio.my_method
#=> "meow"
但如果我们更改@pmacio
的值:
@pmacio = "cat"
我们找到了
@pmacio.my_method
#=> NoMethodError: undefined method `my_method' for "cat":String
这是因为您已在h
上定义了一个方法:
h.my_method
#=> "meow"
你不妨写一下
def h.my_method
"meow"
end
首先,然后执行
@pmacio = h
结果是这个问题与实例变量无关。
请注意,您无法在某些对象上定义方法:
def 1.my_method
end
#=> #SyntaxError: (irb):861: syntax error, unexpected tINTEGER