【发布时间】:2013-04-16 01:53:15
【问题描述】:
我正在浏览 Ruby Koans,我点击了 #41,我相信这是:
def test_default_value_is_the_same_object
hash = Hash.new([])
hash[:one] << "uno"
hash[:two] << "dos"
assert_equal ["uno","dos"], hash[:one]
assert_equal ["uno","dos"], hash[:two]
assert_equal ["uno","dos"], hash[:three]
assert_equal true, hash[:one].object_id == hash[:two].object_id
end
它无法理解这种行为,所以我用 Google 搜索了一下,发现 Strange ruby behavior when using Hash default value, e.g. Hash.new([]) 很好地回答了这个问题。
所以我了解它是如何工作的,我的问题是,为什么在使用过程中不会更改默认值(例如递增的整数)?例如:
puts "Text please: "
text = gets.chomp
words = text.split(" ")
frequencies = Hash.new(0)
words.each { |word| frequencies[word] += 1 }
这将接受用户输入并计算每个单词的使用次数,它之所以有效,是因为始终使用默认值 0。
我感觉它与 << 运算符有关,但我希望得到解释。
【问题讨论】:
-
我相信我看到 '
-
你错了,我认为没有人曾经这样称呼它。根据谷歌的说法,唯一这样做的人是你。第一个也是唯一相关的结果就是这个问题:google.ca/…
-
可能与
::混淆,有时称为范围解析运算符。 -
不,我刚刚查了一下,我看过的其中一个 tuts 将其称为“铲子”,我记错了。我相信,正确的名称只是连接运算符,prolly 应该就这样了。
-
它也不是连接运算符。它是按位左移运算符,也用作附加运算符(用于容器和流)。连接运算符是
+。