我有以下 rubocop 抱怨的 if else 宣告Style/CaseLikeIf: Convert if-elsif to case-when
if obj.is_a? Rest::Headers
obj
elsif obj.is_a? Hash
Rest::Headers.new(**obj)
elsif obj.is_a? Array
Rest::Headers.new(**obj.to_h)
else
raise 'Invalid object type for Headers!'
end
我把它轉換成case陳述句
case
when (obj.is_a? Rest::Headers)
obj
when (obj.is_a? Hash)
Rest::Headers.new(**obj)
when (obj.is_a? Array)
Rest::Headers.new(**obj.to_h)
else
raise 'Invalid object type for Headers!'
end
但是現在rubocop抱怨了Do not use empty case condition, instead use an if expression。有誰知道我的案例陳述有什么問題?
uj5u.com熱心網友回復:
Ruby 希望您轉換為case與型別本身匹配的 a。case在 Ruby 中不僅匹配相等。表格宣告
case a
when b
...
end
案例將呼叫b === a(注意這里的三等號,這并不意味著相等)并在為真時觸發when塊。
===被定義Object為等價于==,但許多類會覆寫它。
- 正則運算式使用它與右側進行模式匹配
- 范圍檢查右側是否包含在范圍內
- 類檢查是否是類的右側
is_a?實體。
這是 Rubocop 建議您使用的第三個要點。
case obj
when Rest::Headers
obj
when Hash
Rest::Headers.new(**obj)
when Array
Rest::Headers.new(**obj.to_h)
else
raise 'Invalid object type for Headers!'
end
請注意,我從來沒有明確地is_a?在這里打電話;該case塊自動知道這樣做。
uj5u.com熱心網友回復:
我假設 Rubocop 期望case obj.
有關更多資訊,請參閱 ruby??doc.info 頁面:
- https://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Style/CaseLikeIf
- https://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Style/EmptyCaseCondition
考慮禁用警察。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/460566.html
標籤:红宝石
上一篇:Yum看不到Ruby已安裝
下一篇:如何使用水豚驗證表是否為空?
