2

有没有办法将属性分配给方法?我知道你可以用类来做到这一点,但我有一系列类似的方法,如果我可以为每个人分配一个属性,那真的很有帮助。有谁知道如何做到这一点,或者在 Ruby 中是否有可能?

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

 class Person
  attr_accessor :age
  ...
 end

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

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

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

4

2 回答 2

2

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

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
于 2012-07-15T19:43:03.063 回答
0

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

使用 attr_reader 访问

attr_reader :your_cool_method_name

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

@object.send :your_cool_mehod_name

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

于 2012-07-15T19:25:28.220 回答