私はこれをスクリーンキャストで見ましたが、この場合「=」記号は何をするのか疑問に思いました。
def express_token=(token)
...
end
こういうことなら理解できるのですが -
def express_token(token = nil)
上記 (2 番目のコード スニペット) は、tokens パラメータのデフォルト値として nil を設定することを意味します。ただし、最初のコード スニペットでは、'=' が括弧の外側にあります。
ベストアンサー1
このスニペットは、仮想属性(または「setter」メソッド) なので、「express_token」は単なるメソッド名であっても、属性のように見えます。例:
class Foo
def foo=(x)
puts "OK: x=#{x}"
end
end
f = Foo.new
f.foo = 123 # => 123
# OK: x=123
オブジェクト「f」には「foo」という名前の属性やインスタンス変数がないので(必要もありません)、この「foo=」メソッドは、代入のように見えるメソッド呼び出しを可能にするための単なる構文上の糖衣です。また、このようなセッターメソッドは、いつもreturn
ステートメントや最終値に関係なく、引数を返します。
たとえば、「irb」でトップレベルのセッター メソッドを定義している場合、Object クラスにメソッドが暗黙的に追加されるため、動作が少しわかりにくい場合があります。たとえば、次のようになります。
def bar=(y)
puts "OK: y=#{y}"
end
bar = 123 # => 123, sets the variable "bar".
bar # => 123
Object.new.bar = 123 # => 123, calls our method
# OK: y=123
Object.public_methods.grep /bar/ # => ["bar="]