gpt4 book ai didi

ruby - Ruby 的 length 方法是一个符号吗?为什么是:length sometimes the same as length?

转载 作者:数据小太阳 更新时间:2023-10-29 07:47:20 32 4
gpt4 key购买 nike

我在阅读有关在 Ruby 中重新定义方法有多么容易的文章时遇到了以下问题:

class Array
alias :old_length :length
def length
old_length / 2
end
end
puts [1, 2, 3].length

当然,这是个坏主意,但它说明了问题。但令我困扰的是,我们如此轻松地在 :lengthlength 以及 :old_lengthold_length 之间切换。所以我这样尝试:

class Array
alias old_length length
def length
old_length / 2
end
end
puts [1, 2, 3].length

它工作得很好——显然就像第一个版本一样。我觉得我缺少了一些明显的东西,但我不确定它是什么。

那么,简而言之,为什么 :namename 在这些情况下可以互换?

最佳答案

方法不是符号,但它的名字是。只需编写 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 的情况是一个异常(exception),只是因为 alias 的工作方式与该语言中的其他所有内容不同。

关于ruby - Ruby 的 length 方法是一个符号吗?为什么是:length sometimes the same as length?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/958489/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com