2016-11-21 66 views
0

將方法添加到對象的最有效的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 
+2

歡迎StackOverflow上。這個問題看起來可能很有趣,但目前我建議你[編輯](https://stackoverflow.com/help/how-to-ask)去1)刪除不必要的「講故事」,2)請解釋「waitfor」方法應該做什麼...可能鏈接到telnet方法的文檔。 – FriendFX

+0

你的問題不清楚。 「將方法添加到實例變量」意味着什麼?您只能將模塊添加到模塊中。一個實例變量不是一個模塊。一個實例變量甚至不是一個對象(變量不是Ruby中的對象)。 –

回答

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 
+0

對不起,語言的使用不好,我可以認爲更容易的語法也將更加高效率的CPU? –

+0

如果您定義方法的方式對效率有任何影響,我會感到驚訝。 –