変数名を繰り返すことなく、文字列をそのような整数に変換する方法はありません。 String#upcase!
およびArray#flatten!
のようなメソッドは、によって変更されます。オブジェクトです。ただし、オブジェクトを異なるクラスのインスタンスに変換するので、String#to_i!
のようなメソッドを定義することはできません。
例えば、ここではそのような方法を定義する(失敗)の試みです:
# What I want to be able to do:
# my_var = "123"
# my_var.to_i! # => my_var == 123
class String
def to_i!
replace(Integer(self))
end
end
my_var = "123"
my_var.to_i! # TypeError: no implicit conversion of Fixnum into String
を...そして、このコードが有効であったとしても、新たなオブジェクトであるため、それはまだパフォーマンスの向上を提供しないだろうまだ作成されています。
+=
と-=
のあなたの例については、これらが実際にのために単に速記されています
x += 1
# Is equivalent to:
x = x + 1
だからもう一度、ここにはパフォーマンスゲインがどちらかありません。ちょっときれいな構文です。良い質問は、why doesn't ruby support a ++
operator?場合は、そのような演算子が存在した場合は、パフォーマンスの向上を提供するだろう...しかし、私はあなたがなぜこれが言語から行方不明であるかを調査することができます。
したがって、+=
、-=
、|=
と&=
などの特殊演算子はすべて事前に定義されて
is there universal way to do this for all methods?
号を要約します。 method_name=
などの「一般化された」バージョンはありません。
オブジェクトを変更するメソッドを定義することもできますが、適切な場合にのみ行うことができます。そのようなメソッドは、通常、!
で名前が付けられ、「バンメソッド」と呼ばれ、「ノンバン」の対応があります。 String
オブジェクトに対して、例えば、String#capitalize!
(及びString#capitalize
)、String#delete!
(及びString#delete
)、String#encode!
(及びString#encode
)、...が、上述の理由でないString#to_i!
があります。
あなたが求めているのは、普遍的な '。='はありません。なぜあなたはそれを必要としますか? – ndn