3
1.9.3-p194 :012 > b=[1,2,3];b.instance_variable_set :@internal, "rrr";
b.define_singleton_method :xx do; @internal; end
 => #<Proc:0x000000020f3d20@(irb):12 (lambda)> 
1.9.3-p194 :013 > b
 => [1, 2, 3] 
1.9.3-p194 :014 > b.xx
 => "rrr"
1.9.3-p194 :015 > b.define_singleton_method :"xx=(val)" do; @internal=val; end
 => #<Proc:0x0000000254aec8@(irb):15 (lambda)> 
1.9.3-p194 :017 > b.xx="yy"
NoMethodError: undefined method `xx=' for [1, 2, 3]:Array
    from (irb):17
    from /home/sir/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'

インスタンス変数用のライターが欲しいのですが、うまくいきません。私は何を間違っていますか?

4

2 に答える 2

7

メソッド名ではなく、ブロックを介して引数を受け入れる必要があります。

b.define_singleton_method(:xx=) do |val|
  @internal = val
end
于 2012-05-30T00:54:35.467 に答える
1

という名前のメソッドを定義しましたが、 という名前xx=(val)のメソッドを呼び出していますxx=。2 つが一致するように、定義または呼び出しサイトのいずれかを変更する必要があります。

于 2012-05-30T10:39:32.413 に答える