【发布时间】:2014-10-13 10:43:02
【问题描述】:
我需要知道这两个语句之间的技术差异以及为什么会这样:
arr = Array.new(3, "abc")
=> ["abc","abc","abc"]
arr.last.upcase!
=> "ABC"
arr
=>["ABC","ABC","ABC"] # which is **not** what I excepted
另一方面:
arr = Array.new(3){"abc"}
=> ["abc","abc","abc"]
arr.last.upcase!
=>"ABC"
arr
=> ["abc","abc","ABC"] # which is what I excepted
【问题讨论】:
-
来自documentation: "请注意,第二个参数使用对同一对象的引用填充数组。因此,仅在需要实例化具有本机不可变数组的情况下才推荐对象,例如符号、数字、真假。”
-
我要补充一点,以防万一您是 Java 程序员,Ruby 字符串是可变对象,不像 Java 那样。
-
我知道这是重复的(已经被问过很多次了),但是我的搜索失败了。有人手头有链接吗?
-
@JörgWMittag,当 SO 的搜索引擎没有找到我要查找的内容时,我已经成功使用 Google,搜索字符串中包含“site:stackoverflow.com”。跨度>
标签: ruby