両方のメソッドが実際に定義され、メソッドとして呼び出されています。+
Rubyでは、 、-
、*
などの演算子でさえ、かなり多くのものをメソッドとして定義できます/
。Ruby では、メソッドに 3 つの特別な記法接尾辞を付けることができます。その言葉はすべて自分で作りました。記法接尾辞とは、メソッドの最後にあるものが、そのメソッドがどのように機能するかを示しているということです。
バン!
最初の接尾辞は!
. これは、メソッドがdestructiveであると想定されていることを示します。つまり、メソッドが呼び出されたオブジェクトを変更することを意味します。これら 2 つのスクリプトの出力を比較します。
a = [1, 2, 3]
a.map { |x| x * x }
a
と:
a = [1, 2, 3]
a.map! { |x| x * x }
a
2 つのスクリプトには 1 文字の違いがありますが、動作は異なります。最初のものは配列内の各要素を通過し、ブロック内で操作を実行しますが、オブジェクトは開始時とa
同じまま[1,2,3]
です。
ただし、2 番目の例では、a
代わりに、オブジェクトがその場で変更された[1, 4, 9]
ため、最後の が表示されます。map!
クエリ
2 番目の表記接尾辞は?
, であり、これはメソッドが何かについてオブジェクトをクエリするために使用されることを示し、メソッドが を返すことになっていることtrue
、false
またはいくつかの極端な状況では , を意味しnil
ます。
ここで、メソッドが戻る必要がないことに注意してください。true
またはfalse
...それができればとてもいいというだけです!
証拠:
def a?
true
end
def b?
"moo"
end
呼び出すa?
と が返さtrue
れ、呼び出すb?
と "moo" が返されます。以上がクエリメソッドです。一部の開発者は他の開発者を好まないため、返す必要があるメソッドまたはしかし時々他のものを返すことがあります。true
false
セッター!
今、私たちはあなたの(言い換えられた)質問の要点に行き着きます.メソッドの最後にある意味は何ですか?=
これは通常、メソッドが特定の値を設定しようとしていることを示しています。これは、私がこの回答のエッセイを入力し終える前にErikが概説したようにです。
ただし、クエリ メソッドがまたはを返さない場合があるのと同様に、1 つを設定しない場合があります。それはただの慣習です。true
false
次のようにセッター メソッドを呼び出すこともできます。
foo.something_else="value"
または(私のお気に入り):
foo.something_else = "value"
理論的には、メソッドに渡された引数を完全に無視できるのと同じように、渡された値を実際に無視できます。
def foo?(*args)
"moo"
end
>> foo?(:please, :oh, :please, :why, :"won't", :you, :use, :these, :arguments, :i, :got, :just, :for, :you, :question_mark?)
=> "moo"
Ruby は setter メソッドの 3 つの構文すべてをサポートしていますが、あなたが使用したものを目にすることはめったにありません!
さて、この回答がおおざっぱな教育的なものであり、Ruby についてより多くのことを理解していただければ幸いです。楽しみ!