Ruby 101:如何保存,读取,写入,然后保存数组的内容?

use*_*377 2 ruby arrays save ruby-1.8

感谢您抽出宝贵时间进行审核,并就我的简单问题提出建议.我正在为我正在工作的练习寻求解决方案.

我想知道如何编写这个数组的内容:

@points = [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

到这个字符串:

saved_points1  = "SAVED_POINTS2 = [%s]" % [@points]
Run Code Online (Sandbox Code Playgroud)

这样当打印saved_points1时,它会打印:

"SAVED_POINTS2 = [1, 2, 3, 4]"
Run Code Online (Sandbox Code Playgroud)

现在,我在打印时看到了这个:

"SAVED_POINTS2 = [1234]"
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,也许这可能是一个红宝石版本的问题.我在1.8.7.也许如果我在1.9.x上阵列将按预期打印?或者是否有不同/更好的方法来保存,读取,然后打印此操作?

如果它有所不同,SAVED_POINTS2存在于实例化时我需要的模块中.我正在使用该模块中的变量来加载/保存我的新类的值(@points存在于其中).我敢打赌,这不是保存状态的正确方法,但这是我知道如何在我目前的红宝石理解水平上做到这一点的唯一方法.所以,我不一定在寻找更好的保存状态方法的建议,因为我想确保我先了解如何从这些数组中正确读/写.但如果你得到了我认为我明白的建议,我很乐意听到.

Ser*_*sev 6

Array#to_s确实在ruby 1.8和1.9中有不同的行为.有通用的方法来获得你想要的字符串.Array有一个join方法,它使用分隔符连接数组的所有元素.您的分隔符将是一个字符串', '.

@points = [1, 2, 3, 4]

s = "SAVED_POINTS2 = [#{@points.join(', ')}]"

s # => "SAVED_POINTS2 = [1, 2, 3, 4]"
Run Code Online (Sandbox Code Playgroud)