是Ruby';s长度方法是一个符号吗?为什么:长度有时与长度相同?
在阅读Ruby中重新定义方法的过程中,我遇到了以下问题:是Ruby';s长度方法是一个符号吗?为什么:长度有时与长度相同?,ruby,alias,symbols,Ruby,Alias,Symbols,在阅读Ruby中重新定义方法的过程中,我遇到了以下问题: class Array alias :old_length :length def length old_length / 2 end end puts [1, 2, 3].length 当然,这是个坏主意,但它说明了问题。但让我烦恼的是,我们很容易在:length和length和:old_length和old_length之间切换。所以我试着这样做: class Array alias old_length l
class Array
alias :old_length :length
def length
old_length / 2
end
end
puts [1, 2, 3].length
当然,这是个坏主意,但它说明了问题。但让我烦恼的是,我们很容易在:length
和length
和:old_length
和old_length
之间切换。所以我试着这样做:
class Array
alias old_length length
def length
old_length / 2
end
end
puts [1, 2, 3].length
它工作得很好-显然就像第一个版本一样。我觉得有一些明显的东西我错过了,但我不确定它是什么
简而言之,为什么在这些情况下,
:name
和name
是可互换的呢?alias
是一个需要特殊处理的原语,显然可以同时使用符号和裸名。相关的alias\u方法
只是一个普通方法,必须使用普通语法
alias_method :old_length, :length
方法不是符号,而是名称。只要写
length
就会调用方法length
。要指定方法的名称而不是执行方法,请使用符号
class Array
def show_the_difference
puts length
puts :length
end
end
['three', 'items', 'here'].show_the_difference
# prints "3" for the first puts and then "length" for the second
您在
alias
中发现的情况是一个例外,因为alias
的工作方式不同于该语言中的其他任何东西。Perfect:这很有帮助,而且不太明显,我会因为不知道它而感到难过。