下面的代碼將哈希陣列中提供的鍵值從 JSON 轉換為哈希(如果不是)nil。這在示例 1中得到了證明。
因此,在示例 2中,提供的密鑰nil不會對資料進行任何更改。這是我想要的行為。但是我不明白為什么會這樣。在示例 2 中,代碼未命中行if !hash[key].nil?,這意味著函式必須回傳nil,但它似乎正在回傳data_2。在 ruby?? 中,我了解函式回傳最后一個評估的陳述句。在示例 2 中,最后一個評估陳述句到底是什么?
require 'json'
def convert(arr_of_hashes, key)
arr_of_hashes.each do |hash|
if !hash[key].nil?
begin
JSON.parse(hash[key])
rescue JSON::ParserError => e
raise "Bad"
else
hash[key] = JSON.parse(hash[key], {:symbolize_names => true})
end
end
end
end
data_1 = [ { :key_1 => "Apple", :key_2 => "{\"one\":1, \"two\":2}", :key_3 => 200 }, { :key_1 => "Orange" } ]
data_2 = [ { :key_1 => "Apple", :key_2 => nil, :key_3 => 200 }, { :key_1 => "Orange" } ]
# Example 1
p convert(data_1, :key_2)
# [{:key_1=>"Apple", :key_2=>{:one=>1, :two=>2}, :key_3=>200}, {:key_1=>"Orange"}]
# Example 2
p convert(data_2, :key_4)
# [{:key_1=>"Apple", :key_2=>nil, :key_3=>200}, {:key_1=>"Orange"}]
uj5u.com熱心網友回復:
考慮一個非常基本的例子:
irb(main):003:0> a = [1, 2, 3]
=> [1, 2, 3]
irb(main):004:0> a.each { |x| p x }
1
2
3
=> [1, 2, 3]
irb(main):005:0>
該#each方法正在回傳Enumerable物件。
如果我將它包裝在一個方法中,該方法將回傳最后一個運算式,該運算式的計算結果為Enumerableobject a。
irb(main):006:0> def foo(a)
irb(main):007:1> a.each { |x| puts x }
irb(main):008:1> end
=> :foo
irb(main):009:0> foo([1, 2, 3])
1
2
3
=> [1, 2, 3]
irb(main):010:0>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/497649.html
標籤:红宝石
