加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 为什么我可以改变常量?

发布时间:2020-12-17 03:21:16 所属栏目:百科 来源:网络整理
导读:class TestClass CONSTANT = 1endTestClass::CONSTANT = 2 显然你可以随时在Ruby中更改常量的值.如果你能改变它们,为什么它们甚至被称为“常数”? 这些“常数”的目的是什么?改变价值的能力如何使编程更容易? 解决方法 好吧,Ruby中的常量是相对可变的.它
class TestClass
  CONSTANT = 1
end

TestClass::CONSTANT = 2

显然你可以随时在Ruby中更改常量的值.如果你能改变它们,为什么它们甚至被称为“常数”?

这些“常数”的目的是什么?改变价值的能力如何使编程更容易?

解决方法

好吧,Ruby中的常量是相对可变的.它们指向的对象可以交换(如在您的示例中),并且它们的状态也可以更改.

class TestClass
  Constant = []
end
TestClass::Constant << "no warning at all!"

它们提供的唯一优势是当您将现有常量指向另一个对象时生成的警告.见“Programming Ruby”,section “Variables and Constants”.它虽旧但仍然有效.

Ruby常量存在的目的是表明不应该改变给定的引用.例如,如果你做Math :: PI = 3.0,你应该得到警告.

从理论上讲,您可以破坏与原始实现的兼容性并强制执行常量的不变性.因此,通过优化方法调度,您可以实现轻微的性能提升.

在上面的例子中,你知道Constant.is_a?数组如此调度<<在第一次执行该行时,只能对实际方法执行一次符号.问题是Ruby允许您重新定义Array#<<从而使问题更棘手. 检查各种Ruby实现是否尝试使用此类优化需要进行一些额外的研究并挖掘其文档或来源.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读