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

オブジェクトの変数としてメソッドを呼び出すことができることについて話しているだけなら、私が知っている少なくとも3つのパスがあります...

attr_reader アクセサーの使用アクセサー

attr_reader :your_cool_method_name

オブジェクトで send を呼び出すことができます。この方法ではスコープ (public、protected、private) が無視されることに注意してください。

@object.send :your_cool_mehod_name

または、method_missing 呼び出しを使用して行うこともできますが、これは少し高度であり、あなたの質問に基づいて、Ruby に慣れるまでこのアプローチを保留します。

于 2012-07-15T19:25:28.220 に答える