-1

Array クラスを編集している場合、各メソッドを自己で定義する必要はありません (例: self.sum)。def の直後に self.method がなくても、「Test-First」Ruby トラックの rpsec テストに合格する理由がわかりません。

class Array

  def sum
    count = 0
    self.each {|x| count += x}
    count
  end

  def square
    self.map {|x| x * x}
  end

  def square!
    self.map! {|x| x * x}
  end
end
4

1 に答える 1

1

これらは「インスタンス メソッド」です。クラス自体ではなく、のインスタンスで動作します。メソッドを定義するときに各メソッドの名前の前に置くと、「クラス メソッド」を定義することになり、これらのメソッドには意味がありません。ArrayArrayself.

必須ではありませんが、別のメソッドの本体内からこれらのメソッドを呼び出すself.ときに機能する理由は、その時点で「インスタンス」であると定義されているためです。これは、 でメソッドを定義している場合とは対照的です。はクラスです。selfdefselfArray

于 2013-09-13T22:10:03.900 に答える