Ruby 中的常量和变量有什​​么区别?

2023-11-30

因此,我正在 CodeAcademy 上学习 Ruby 课程,但我一直在区分变量和类之间的差异。有人可以向我解释一下其中的区别吗?我给你饼干! ^^。无论我在网上哪里查找,都找不到任何有关此的信息。


Ruby 中常量的想法是,它们只能分配一次值,而您可以根据需要多次为变量分配新值。现在从技术上讲,您甚至可以为常量分配新值。然而,在这种情况下,Ruby 会发出警告,您应该尽量避免这种情况。

我想导致 Ruby 新手感到困惑的主要一点是,即使分配给常量的值也可以在没有警告的情况下进行修改(例如,通过向数组添加新元素)。常量的引用与此处的变量没有什么不同,因为引用不限制可以对该值执行的操作。变量或常量引用的对象始终与其无关。

在此示例中,我将一个新数组分配给ARRAY持续的。稍后,我可以愉快地通过向数组添加新成员来更改数组。常数与此无关。

ARRAY = []
# => []
ARRAY << :foo
ARRAY
# => [:foo]

唯一禁止的(或者,好吧,允许但有警告)是如果您尝试为常量分配一个全新的值:

ARRAY2 = []
# => []
ARRAY2 = [:bar]
# warning: already initialized constant ARRAY2
ARRAY2
=> [:bar]

因此,通常的做法是立即冻结分配给常量的值,以完全拒绝任何进一步的更改并确保保留原始值(除非有人分配新值):

ARRAY3 = [:foo, :bar].freeze
ARRAY3 << :baz
# RuntimeError: can't modify frozen Array
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby 中的常量和变量有什​​么区别? 的相关文章

随机推荐

  • 为什么这些不同的编码不允许我正确显示葡萄牙语?

    我正在做一些涉及葡萄牙语文本的文本挖掘 我的一些自定义文本挖掘函数中还包含其他特殊字符 我不是这个话题的专家 当我的很多字符开始显示不正确时 我认为我需要更改文件编码 我试过 ISO 8858 1 ISO 8858 7 UTF 8 WIND
  • 从 python 代码创建适用于 Windows 的独立可执行文件

    我有一个 python 代码 它使用 pygkt gtk ctypes os 和其他一些模块 我使用 pyinstaller 创建了代码的独立执行程序 在ubuntu上运行得很好 现在我想为Windows平台创建另一个独立的执行程序 我使用
  • Android 改造 POST ArrayList

    正在尝试发送List
  • 从 Kafka 读取时使用 KeyBy 与 reinterpretAsKeyedStream()

    我有一个简单的 Flink 流处理应用程序 Flink 版本 1 13 Flink 应用程序从 Kakfa 读取数据 对记录进行状态处理 然后将结果写回 Kafka 阅读完 Kafka 主题后 我选择使用reinterpretAsKeyed
  • 通过分组变量折叠列(以基数为单位)

    我有一个文本变量和一个分组变量 我想按因子将文本变量折叠为每行一个字符串 合并 所以只要群栏里说m我想将文本分组在一起等等 我在之前和之后提供了一个示例数据集 我正在为一个包编写此内容 到目前为止已经避免了对其他包的所有依赖 除了wordc
  • 2.7.4 上的 Python / 和 // 运算符

    我是Python新手 我开始学习基础知识 我是一名 C 人员 所以 运算符是新的东西 根据我正在读的一本书 gt gt 4 2 2 0 gt gt 2 4 0 5 gt gt 5 4 2 gt gt 2 4 0 问题是当我写的时候5 4当我
  • 修改内存区域 - 返回 0xCC VC++

    我正在修改 dll 中编译的可执行代码的某些部分 但是我正在修改的整个段中固定地址处的单个字节无法更改 甚至无法读取 代码很简单 SEGMENT DATA segInfo getSegmentInfo mHandle segmentName
  • 如何从 Angular mat-select 获取以前的和新的值?

    你好 我使用的是 Angular 6 和 agular 材料 并且我有一个字符串数组 我将其显示在垫选择表单字段中 如果用户选择一个元素 然后选择另一个元素 我需要跟踪前一个值是什么以及新值是什么 到目前为止 我已经能够使用 event v
  • 使用 XSLT 转换在 XML 中创建 xmlns 属性

    我尝试使用 JDK Transformer Oracle XML v2 Parser 或 JAXP 在 XSLT 转换期间将 xmlns 属性添加到结果 XML 并使用参数传递的值 但它始终默认为http www w3 org 2000 x
  • 如何使文本与图标字体垂直对齐?

    我有一个非常基本的 HTML 它混合了纯文本和图标字体 问题在于图标的渲染高度与文本的高度不完全相同 div class ui menu a href t class item i class large home basic icon i
  • 创建简单的 URL(.htaccess - mod_rewrite)

    我的导航有这个结构index php v page 我希望将其转换为 www domain com page 使用 mod rewrite 对此有什么想法吗 我读了一些图和例子 但无法让它正常工作 这里有一些例子 RewriteEngine
  • 如何在 Ionic 中制作开/关按钮

    我需要在 Ionic 中放置一个按钮 该按钮在按下后保持激活状态 并且仅在再次按下后才停用 有一个类似的问题 但它仅适用于图标按钮 如何添加具有离子开 离子关功能的导航栏按钮 EDIT 我无法使用切换按钮 它需要是一个常规外观的按钮 在本例
  • 如何在 Matplotlib (Numpy) 中生成 MATLAB 图(插值)?

    我正在尝试遵循网格网格 插值的 MATLAB 示例 示例代码已找到HERE 在该网站上 我正在查看以下示例 示例 在表面上显示不均匀数据 Now I would like to produce a similar plot in Pytho
  • 带闭包的 python 计数器

    我正在尝试用 python 构建一个具有闭包属性的计数器 以下代码有效 def generate counter CNT 0 def add one CNT 0 CNT 0 1 return CNT 0 return add one 但是
  • PHP-从字符串中获取特定单词

    如果我有一个像这样的字符串 myString input name something 我怎样才能得到name得到回应 每个字符串看起来都是这样 除了名称和其他内容可能不同 所以你唯一知道的是 输入后开始 它用正斜杠分隔 gt strArr
  • std::unique_ptr 作为目标 c 中的 @property

    如何在 Objective C 类的接口部分定义 std unique ptr 的 property property std unique ptr
  • 将对象推入数组无法按预期工作

    我的目标是创建一个像这样的数组 str a number 1 str a number 2 str b number 1 str b number 2 所以我写了这个javascript abc a b num 1 2 arr a for
  • 如何使用 TestNG 框架和 Jenkins 运行 Selenium 测试

    我想使用 Jenkins 运行在 TestNG 框架中编写的 Selenium 测试 jenkins job Freestyle项目 中配置的命令 java cp J taf testng J taf workspace TestNGExa
  • 如何使用 htaccess 将下划线替换为破折号?

    好的 这是我的网址 http example com home process login 我想用破折号替换下划线 So http example com home process login会转到上面的网址 但它仍然会说process l
  • Ruby 中的常量和变量有什​​么区别?

    因此 我正在 CodeAcademy 上学习 Ruby 课程 但我一直在区分变量和类之间的差异 有人可以向我解释一下其中的区别吗 我给你饼干 无论我在网上哪里查找 都找不到任何有关此的信息 Ruby 中常量的想法是 它们只能分配一次值 而您