1
4
不,它没有附加到,也不是局部变量。 这个 单一的 对象 二者都 所引用的常量和局部变量已附加到,但常量和局部变量均未更改。您不能在Ruby中修改或更改变量或常量(至少不能像您的问题所暗示的那样),这是您 可以 改变就是对象。 只有两件事你 可以 处理变量或常量是取消引用并分配给它们。 常数在这里是一个红鲱鱼,它与给出的例子完全无关。唯一相关的是 一 整个示例中的单个对象。可以使用两个不同的名称访问单个对象。如果对象更改,则对象更改。时期。它不会神秘地一分为二。使用哪个名称查看更改的对象并不重要。反正只有一个对象。
这与任何其他编程语言完全一样:如果你有多个引用,比如Python、Java、C、C++、C、LISP、SimulalTalk、JavaScript、PHP、Perl等,那么无论使用什么引用,对该对象的任何更改都是可见的,即使这些引用中的一些引用也是可见的。
这就是共享可变状态的工作原理,也是共享可变状态不好的原因之一。
在Ruby中,通常可以调用
这是你的可变状态。摆脱这种疯狂的唯一方法要么是放弃共享状态(例如演员编程:如果没有其他人能看到它,那么不管它多久或何时改变)要么是可变状态(即功能编程:如果它从不改变,那么其他人看到它的多少也不重要)。 原来例子中的两个变量之一实际上是一个常数,这与问题完全无关。Ruby中的变量和常量有两个主要区别:它们具有不同的查找规则,如果将常量分配给多个对象,它们将生成警告。但是在这个例子中,查找规则是不相关的,常量只分配一次,所以在这种情况下,变量和常量之间实际上没有区别。 |
2
5
已知行为。常量并不意味着你不能修改它所引用的对象,仅仅意味着如果你将它分配给一个不同的对象,它会给你一个警告(并且只有一个警告)。 简而言之,Ruby常量不是。 注释 :此行为列在 answer “应该警告新手什么是Ruby Gotchas?”这是一本值得一读的书。 |
3
0
如果希望常量不可变,可以冻结它们:
|
4
0
Ruby中的常量不是“常量”。您也可以使用任何其他名称;如果不尝试更改指针的地址,则将它们全部大写不会改变对象的任何内容(以解释程序为准)。 如果你这样看的话,行为是显而易见的,也是必要的;苹果是一个指向字符串对象的指针,香蕉也是。然后编辑香蕉指向的对象。苹果正指向同一个对象,所以变化也反映在那里。 |
Stilian · 存储库设置中没有Github页面部分 2 年前 |
Kellen · 查看$卷展栏功能列表 2 年前 |
Akshit Thakur Ak · 我怎样才能把铁轨停下来? 2 年前 |
johncssjs · 将数组转换为每个元素的嵌套哈希 2 年前 |
solidsnake99 · Rails db:如何绕过验证 2 年前 |