Ruby - 方法属性

时间:2012-07-15 18:52:23

标签: ruby methods attributes

有没有办法为方法分配属性?我知道你可以用类来做,但我有一系列类似的方法,如果我可以为每个方法分配一个属性,那将非常有用。有没有人知道如何做到这一点,或者甚至可以在Ruby中使用它?

编辑:我的意思是,当你有一个班级时,你可以像这样为它分配属性:

 class Person
  attr_accessor :age
  ...
 end

我想知道是否也可以使用方法来做到这一点,例如:

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

(顺便说一下,这只是一个例子。实际的程序要复杂得多,这就解释了为什么我不能简单地将我的方法转换为类来赋予它们属性。)

2 个答案:

答案 0 :(得分:2)

由于方法是Ruby中的对象,因此您可以像对待任何其他对象一样在Method对象上定义方法。如果您特别想使用attr_accessor,则可以像这样打开方法eigenclass

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关键字明确定义对象上的方法:

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

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

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

答案 1 :(得分:0)

如果您只是在谈论能够将方法作为变量调用对象,那么至少有三条我知道的路径......

使用attr_reader访问器Accessors

attr_reader :your_cool_method_name

您可以在对象上调用send。请注意,这种方式忽略了范围(公共,受保护,私有)

@object.send :your_cool_mehod_name

或者你可以通过method_missing调用来做到这一点,但这有点高级,根据你的问题,我会推迟这种方法,直到你对Ruby的熟悉程度增加。