[通过rubylearning教程学习ruby时,我不得不'使用别名'部分。我无法理解使用别名之间的区别,例如:
def oldmtd
"old method"
end
alias newmtd oldmtd
def oldmtd
"old improved method"
end
puts oldmtd
puts newmtd
带输出
old improved method
old method
并且只需为此函数分配一个新变量,例如:
def oldmtd
"old method"
end
newmtd = oldmtd
def oldmtd
"old improved method"
end
puts oldmtd
puts newmtd
具有相同的输出:
old improved method
old method
请告诉我什么是实际区别,何时使用'别名'是正确的?
使用newmtd = oldmtd
,您没有为函数分配新变量;您正在为函数的result分配一个变量,即字符串。用Python术语:newmtd = oldmtd()
别名允许您使用其他名称调用对象。当您进行变量分配时,将为它分配=
运算符右侧返回的值。
当您重新定义原始方法时,您还重新定义了别名方法,因为它仍然调用已为其别名的原始方法。
但是,如果要为方法添加别名,则可能要使用alias_method
。有关更多信息,请参见this question。
关于何时或为什么使用别名,请参阅answers to this question。
此声明:
newmtd = oldmtd
将通过调用oldmtd()
返回的字符串分配给变量newmtd
。这是一个简单的字符串分配。您可以像这样验证它:
> newmtd = oldmtd
> method :oldmtd
=> #<Method: main.oldmtd> # <- this is a real method
> medhod :newmtd
=> NameError (undefined method 'newmtd' ...) # <- no such method exists
但是使用alias
,两者都将返回一个实数方法。
> alias newmtd oldmtd
> method :oldmtd
=> #<Method: main.oldmtd> # <- this is a real method
> medhod :newmtd
=> #<Method: main.newmtd(oldmtd)> # <- this is a real method, aliased