我重新定义了Array#replace
,如下所示。
require 'test/unit'
class Array
def replace (from, to)
each_with_index do |e, i|
self[i] = to if e = from
end
end
end
class TestDriver <Test::Unit::TestCase
def test_replace
book_topic = ['html', 'java', 'css']
book_topic.replace('java', 'ruby')
result_topic = ['html', 'ruby', 'css']
assert_equal book_topic, result_topic
end
end
当我运行该测试用例时,它断言book_topic
为['html', 'ruby', 'ruby']
。我不知道book_topic
的结果。谁能告诉我为什么?
答案 0 :(得分:8)
您错过了=
中的e == from
。
self[i] = to if e == from
PS:我希望你知道覆盖这样的核心方法的优点/缺点。
答案 1 :(得分:2)
考虑使用map
或map!
而不是覆盖Array的替换方法。
>> [1,2,3].map { |a| a == 1 ? 2 : a }
=> [2, 2, 3]