爲什麼這樣工作?我認爲這與通過引用/值傳遞有關,但事實並非如此。它是否與新的塊範圍有關?Ruby 1.8 vs 1.9 - 破壞性拒絕!運營商
def strip_ids(array)
array.each{ |row| row.reject! {|k, v| k =~ /_id/ } }
end
class Foo
attr_accessor :array
def initialize
@array = []
@array << { :some_id => 1, :something => 'one' }
@array << { :some_id => 2, :something => 'two' }
@array << { :some_id => 3, :something => 'three'}
end
end
foo = Foo.new
puts strip_ids(foo.array).inspect
puts foo.array.inspect
##########################
#
# Output in ruby 1.8.7
#
# [{:some_id=>1, :something=>"one"}, {:some_id=>2, :something=>"two"}, {:some_id=>3, :something=>"three"}]
#
#
# Output in ruby 1.9.1
#
# [{:something=>"one"}, {:something=>"two"}, {:something=>"three"}]
#
這是第一個。在1.8.7中做'k.to_s',你會沒事的。 – 2009-11-04 04:28:36
實際上,我終於開始構建1.9.1p243,它也產生了一個符號,所以它必須是第二種解釋:正則表達式現在適用於符號。但正如我們所指出的那樣,解決方案也是一樣的。 – DigitalRoss 2009-11-04 05:47:15
羅斯先生說得對。 – 2009-11-04 06:03:45