Ruby 覆盖变量而不重复其名称

Ruby 覆盖变量而不重复其名称,ruby,performance,Ruby,Performance,是否有一种方法可以覆盖变量而不复制其名称?例如,当我想将my_var='3'更改为整数时,我必须执行以下操作: my_var = my_var.to_i my_var = something_const.to_i 有没有不复制变量名的方法?我想这样做: my_var = my_var.to_i my_var = something_const.to_i 对于数字存在+=,-=等,但对于所有方法都有通用的方法吗?如果不重复变量名,就无法将字符串转换为那样的整数。方法,例如String#up

是否有一种方法可以覆盖变量而不复制其名称?例如,当我想将
my_var='3'
更改为整数时,我必须执行以下操作:

my_var = my_var.to_i
my_var = something_const.to_i
有没有不复制变量名的方法?我想这样做:

my_var = my_var.to_i
my_var = something_const.to_i

对于数字存在
+=
-=
等,但对于所有方法都有通用的方法吗?

如果不重复变量名,就无法将字符串转换为那样的整数。方法,例如
String#upcase
数组#展平通过改变对象来工作;但是,不可能定义像
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
同样,这里也没有性能增益;只是语法稍微好一点。一个好问题是,如果存在这样一个运营商,那么它将提供性能增益。。。但我会让你自己研究为什么语言中没有这个

总而言之

对于所有方法,是否都有通用的方法来实现这一点

不可以。特殊运算符如
+=
-=
|=
&=
都是预定义的;没有像
method\u name=
这样的“通用”版本


您还可以定义改变对象的方法,但只有在适当的时候。这些方法通常用
命名,称为“bang方法”,并具有“非bang”对应项。例如,在
String
对象上,有(和
String#capitalize
),(和
String#delete
),(和
String#encode
)。。。。但是没有
字符串基于上述原因。

如果这是您的要求,则没有通用的
=
。你为什么需要这个呢?是的,给一个不可能解决的问题举个“例子”有点难;)。。。也许您使用
String#replace
的想法是一个更好的尝试,但仍然失败:
TypeError:没有将Fixnum隐式转换为String
。我已经用您的建议更新了我的答案,谢谢:)