3

Ruby が短縮形のメソッド呼び出しをサポートしていることは理解して1.+(2)1+2ますattr_accessor。アクティブなオブジェクトの外でそれらにアクセスしている間は、その名前が異なります) また、何も異なりません (引数が必要な場合writer=除く)。writer

私の質問はこのコードに含まれています (2 番目のコメント)

class Test
  def initialize(number)
    @number = number
  end
  def number
    @number
  end
  def number=(n)
    @number = n
  end
end

t = Test.new(12)

puts t.number # => 12
t.number = 13 # Why does it do what t.number=(13) should do
puts t.number # => 13

数値のみを返す必要があるメソッドを指していて、代わりに呼び出されないt.number = 13ときに新しい値をどのように設定するのか、なぜ機能するのだろうか。t.number=(13)

4

1 に答える 1

1

t.number = 13は単なる省略形でt.number=(13)あり、Ruby では事実上同じステートメントです。

attr_accessor :b次の 2 つのメソッドに相当するものを作成します。

def b
  @b
end
def b=(new_val)
  @b = new_val
end

#numberしたがって、コード例では、2 つのメソッドを#number=置き換えることができます。attr_accessor :number

于 2013-03-16T23:17:39.543 に答える