Tag: 不变性

如何在Ruby中创建变量public final

我想创建一个类,在初始化此类的Object期间,将为其中一个变量赋值,这样就无法更改。 例如: person = Person.new(“Tom”) person.name #=> Tom person.name = “Bob” 这应该引发错误或: person.name #=> Tom -> still

只需一个级别就可以将数组推送到ruby上的数组中

鉴于: a = [[1,”a”],[2,”b”]] b = [[3,”c”],[4,”d”]] 我想把a变成[[1,”a”],[2,”b”][3,”c”],[4,”d”]] 。 没有+怎么办呢? 它创建了一个我想避免的新数组。 (a < [1, “a”, 2, “b”, [3, “c”], [4, “d”]]

Ruby – 不可变对象

我有一个用Ruby编写的高度multithreading的应用程序,它共享一些实例变量。 写入这些变量很少(1%),而读取非常常见(99%)。 什么是最好的方式(在您看来或以惯用的Ruby方式)确保这些线程始终能够看到最新的值? 到目前为止,我有一些想法(尽管在我检修之前我想要你的意见): 在读取或写入任何这些变量之前,请使用最常用的锁(来自Java Concurrency in Practice )。 这样做的缺点是它在我的代码中放了很多synchronize块,我没有看到一种简单的方法来避免它。 使用Ruby的freeze方法(见这里 ),虽然它看起来同样麻烦,并没有给我任何第一个选项带来的同步好处。 这些选项看起来都非常相似,但希望那里的任何人都会有更好的想法(或者可以为其中一个想法辩护)。 我也可以将对象变为不可变,因此它们在操作过程中不会被破坏或改变,但是我不太了解Ruby以便自己调用这个问题似乎在争论对象是高度可变的。

Ruby中的字符串是否可变?

字符串在Ruby中是否可变? 据文件说 str = “hello” str = str + ” world” 创建一个值为”hello world”的新字符串对象,但是当我们这样做时 str = “hello” str << " world" 它没有提到它创建了一个新对象,所以它是否会改变str对象,它现在具有值”hello world” ?