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
。我已经用您的建议更新了我的答案,谢谢:)