2012-07-15 260 views
2

有什麼辦法給屬性賦一個方法嗎?我知道你可以通過類來完成,但是我有一系列類似的方法,如果我可以爲每個屬性賦值,那真的會有所幫助。有誰知道如何去做,或者甚至可以在Ruby中使用?紅寶石 - 方法屬性

編輯:我基本上的意思是,當你有一個類,你可以指定屬性,它是這樣的:

class Person 
    attr_accessor :age 
    ... 
end 

我不知道它是否也可以做到這一點與方​​法,如這樣的:

class Trucks 
def get_fire_truck_name 
    attr_accessor :size 
    ... 
end 
end 

(。順便說一句,這只是一個例子,實際的程序要複雜得多這就解釋了爲什麼我不能簡單地把我的方法分爲類,以給他們的屬性)

+0

你應該提供實例:

class Person attr_accessor :age end m = Person.instance_method(:age) class << m attr_accessor :units end m.units = 'years' puts m.units #=> 'years' 

使用def關鍵字,您也顯式定義對象的方法描述你的問題,否則你的問題就關閉了。 – megas 2012-07-15 19:10:19

+3

像你可以在Python或Javascript中做的? Ruby的方法不是對象,所以答案是否定的。 – tokland 2012-07-15 19:21:11

+2

@tokland Ruby方法是[絕對對象](http://www.ruby-doc.org/core-1.9.3/Method.html)。 – Brandan 2012-07-15 19:49:59

回答

0

,如果你只是在談論能夠調用對象的方法作爲變量至少有三條路徑,我知道...

使用attr_reader訪問Accessors

attr_reader :your_cool_method_name 

你可以調用對象發送。需要注意的是這種方式忽略範圍(公共,保護,私人)

@object.send :your_cool_mehod_name 

或者你可以做到這一點通過method_missing的呼叫,但是這是一個有點先進的,基於你的問題我會推遲這一做法,直到你熟悉隨着Ruby的增加。

+0

作爲一邊,我強烈建議檢查出這本書元編程Ruby,因爲第一部分提供了一個很好的Ruby綜述。 http://pragprog.com/book/ppmetr/metaprogramming-ruby – engineerDave 2012-07-15 19:27:45

2

由於方法是Ruby中的對象,因此您可以像對待任何其他對象一樣在Method對象上定義方法。如果你特別想使用attr_accessor,你可以打開該方法的eigenclass這樣的:

def m.units 
    @units || 'years' 
end 

def m.units=(u) 
    @units = u 
end 

puts m.units 
m.units = 'decades' 
puts m.units