2010-09-18 76 views
0

目前,我有這樣的代碼:Ruby:在method_missing中找到方法類型的最佳方法是什麼?

name, type = meth.to_s.match(/^(.+?)([=?]?)$/)[1..-1] 

但它似乎並沒有最好的解決方法= \

任何想法如何使它更好? 謝謝。

+0

什麼是「方法類型」? – Reactormonk 2010-09-18 16:15:52

+0

xyz = - setter,xyz? - checker,xyz - getter – Daniel 2010-09-18 16:17:10

+0

您能否在規範中更精確一些:== ==方法或===方法的「類型」是什麼?像「Kernel#puts」這樣的方法的「類型」是什麼? – 2010-09-18 19:05:58

回答

1

最好的選擇似乎是這樣的: name, type = meth.to_s.split(/([?=])/)

+0

沒有任何關係。方法「types」並不存在,你是整個歷史中唯一的人的紅寶石世界談論它們;) – horseyguy 2010-09-19 04:26:05

+0

我知道,我只是不知道如何描述它,所以我認爲「方法類型」會比「方法後綴」更好 – Daniel 2010-09-20 14:55:59

+0

不要聽那個人,他是一個白癡。你在球上,他們通常被稱爲「Setters」和「Getters」。 – 2011-12-14 02:13:35

0

這大約是我怎麼想實現我method_missing

def method_missing(sym, *args, &block) 
    name = sym.to_s 
    if name =~ /^(.*)=$/ 
    # Setter method with name $1. 
    elsif name =~ /^(.*)\?$/ 
    # Predicate method with name $1. 
    elsif name =~ /^(.*)!$/ 
    # Dangerous method with name $1. 
    else 
    # Getter or regular method with name $1. 
    end 
end 

還是這個版本,其中只有一個評估的正則表達式:

def method_missing(sym, *args, &block) 
    name = sym.to_s 
    if name =~ /^(.*)([=?!])$/ 
    # Special method with name $1 and suffix $2. 
    else 
    # Getter or regular method with name. 
    end 
end 
相關問題