我對 Ruby 很陌生,并且有這種撰寫多個 if 陳述句的場景。我想優化它并嘗試找出是否有任何其他替代方案或更好的方法來撰寫以下條件 -
if region == "uk"
value = 1
end
if region == "us"
value = 2
end
if region == "ind"
value = 3
end
if region == "cn"
value = 4
end
問題陳述 - 如果其他地區加起來我的場景,我將無法繼續下去。撰寫上述代碼的任何優化方式?
任何教導和解決方案將不勝感激!
uj5u.com熱心網友回復:
一種方法是使用case陳述句:
value = case region
when 'uk'
1
when 'us'
2
# etc.
end
但是,當您有一個像這樣的簡單串列,除了查找之外沒有任何邏輯,您可以構建一個哈希,其中要查找的值作為鍵,回傳值作為值:
region_values = {
'uk' => 1,
'us' => 2,
# etc.
}
value = region_values['uk']
uj5u.com熱心網友回復:
有幾種方法。
您還可以將 if 陳述句包裝在一個襯里而不是塊中
value = 1 if region == "uk"
value = 2 if region == "us"
value = 3 if region == "ind"
value = 4 if region == "cn"
也可以做這樣的事情
value = if region == "uk"
1
elsif region == "us"
2
elsif region == "ind"
3
elsif region == "cn"
4
end
但是在比較 2 個值時,最好使用 switch 陳述句,即
value = case region
when "uk"
1
when "us"
2
when "ind"
3
when "cn"
4
end
uj5u.com熱心網友回復:
以下是我會考慮的三個選項。最初,我假設region已知的值是陣列中的值之一
REGIONS = ["uk", "us", "ind", "cn"]
現在假設
region = "ind"
#1
value =
case region
when "uk" then 1
when "us" then 2
when "ind" then 3
when "cn" then 4
end
#=> 3
#2
REGION_TO_ID = { "uk"=>1, "us"=>2, "ind"=>3, "cn"=>4 }
value = REGION_TO_ID[region]
#=> 3
#3
value = REGIONS.index(region) 1
#=> 3
其中REGIONS如上定義。
如果region不知道 的值是陣列中的值之一,則REGIONS可能首先執行以下操作:
region = "moon"
raise ArgumentError, "'#{region}' is not an element of REGIONS" unless
REGIONS.include?(region)
#=> ArgumentError: 'moon' is not an element of REGIONS
或者,在#1中可以添加
else raise ArgumentError, "'#{region}' is not an element of REGIONS"
在#2中可以添加
REGION_TO_ID.default_proc = proc { |_,region|
raise ArgumentError, "'#{region}' is not an element of REGIONS" }
REGION_TO_ID['moon']
#=> ArgumentError: 'moon' is not an element of REGIONS
請參閱Hash#default_proc=。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/531281.html
標籤:轨道上的红宝石红宝石
