2012-07-15 193 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