Rails モデルから API を呼び出していますが、API が 200 以外のコードで返された場合にエラーを発生させたいと考えています。それ以外の場合は、データをキャッシュ/遅延ロードします。これは私の方法です:
def data
@data ||= SNL.get_list(name)
raise StandardError, @data.inspect unless @data.success?
@data
end
これは機能しますが、これを1行で達成できるかどうか疑問に思っていました。and
演算子を an と組み合わせて使用しようとしましたunless
が、機能しませんでした。
更新: tokland の回答を受け入れました。なぜなら、私は 1 行を要求し、彼/彼女は 2 つの非常に優れた解決策を提供したからです。最後に実際に使ってみます
def data
@data ||= SNL.get_list(name)
@data.success? ? @data : (raise StandardError, @data.inspect)
end
読みやすさのために。@data
例外が発生することはめったにないので、単に return のための 3 行目が嫌いでした。odiszapc の回答は、簡潔さと読みやすさの最善の妥協点だと思います。みんな、ありがとう。