gpt4 book ai didi

ruby - 为什么 Ruby 中的符号不​​被认为是一种变量?

转载 作者:数据小太阳 更新时间:2023-10-29 06:43:17 24 4
gpt4 key购买 nike

编程和 Ruby 的新手,我希望这个关于符号的问题符合要求。我知道 Ruby 中的符号(例如,:book:price)作为散列键特别有用,并且可以全面地执行轻量级的特定子集字符串可以做到。

但是,我在一方面对符号感到困惑。具体来说,当它们用于 attr_accessor 类型的方法时,它们的行为更像是一个变量。例如,attr_reader :book, :price

如果在该用法中它们是变量,这有点令人费解,因为它们通常不在变量类型中列出(如 $global、@instance、local、@@class,有时还有 CONSTANT,变量类型)描述变量类型时。

如果以这种方式使用符号是变量,那么它们的作用域应该是什么?还是在这种情况下它们仍然以某种方式轻量级字符串? (或者更广泛地说,符号、字符串和变量是否都具有基本的鸭子性质?)提前感谢您的见解和建议。

最佳答案

符号不是变量,而是一种文字值,如数字和带引号的字符串。值得注意的是,符号用于表示 Ruby 运行时中的变量和其他命名值。因此,当 Ruby 解释器看到名称 foo 用作变量或方法名称时,它在运行时值的哈希中查找的是符号 :foo,而不是字符串“富”。事实上,这是编程语言术语中“符号”一词的最初用法;变量、函数、常量、方法等被称为存储在编译器或解释器的“符号表”中。

几乎每次在 Ruby 中传递某物的名称时,您都会使用一个符号。如果您使用 method_missing 作为包罗万象在您的对象类上实现任意方法,那么它接收到的参数就是一个符号,告诉它实际调用的方法的名称。如果您使用 .methods.instance_variables 检查一个对象,您得到的是一个符号数组。等等。

关于ruby - 为什么 Ruby 中的符号不​​被认为是一种变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13850971/

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