在ruby中添加方法的最有效方法?

时间:2016-11-21 01:14:32

标签: ruby

将方法添加到对象的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

1 个答案:

答案 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