1

最初のコード ( selfを使用) は機能するのに、2 番目のコードは機能しないのはなぜですか?

category_uriモデルの属性です

def set_uri
  self.category_uri = self.category_uri.join('-').downcase
  self.save!
end

セルフなし

def set_uri
  category_uri = category_uri.join('-').downcase
  save!
end
4

3 に答える 3

1

2 番目のケースでは、インタープリターはcategory_uri = ...ローカル変数の代入として扱います。そのため、setter メソッド (末尾に があるメソッド) を呼び出したい場合=は、 を使用する必要がありますself

于 2013-08-26T15:27:02.387 に答える
1
def set_uri
  self.category_uri = self.category_uri.join('-').downcase
  self.save!
end

メソッド「set_uri」は instance.set_uri のように呼び出されるため、この場合、「self」はメソッドを呼び出すインスタンスに設定されます。しかし、'self' のない 2 番目のコードでは、'category_uri' は実際にはローカル変数として扱われます。実際、この場合、Ruby は「self」をインスタンスが呼び出すのではなく、メソッド自体に非明示的に設定するため、機能しません。

于 2013-08-26T19:55:51.743 に答える