5

このコードをよりコンパクトにすることは可能ですか?ここに何か足りないものがありますか?

    if value < min_rate
      min_rate
    elsif value > max_rate
      max_rate
    else
      value
    end
4

9 に答える 9

3

私にとって、これはより読みやすく、簡単に理解できるように見えます。あなたがそれを好きになることを願っています。

def some_method    
  return min_rate if value < min_rate
  return max_rate if value > max_rate

  value
end
于 2012-11-09T16:26:20.770 に答える
3

これは完全に異なるものです:

[min_rate, value, max_rate].sort[1]
于 2012-11-09T23:31:30.380 に答える
2

max(min(value, max_rate), min_rate). minこれにより、それぞれおよび内の if-分岐 ("iffing"?) が隠さmaxれます。

于 2012-11-09T14:19:17.373 に答える
1

必要なものはネストされた三項演算子と呼ばれます

value < min_rate ? min_rate :
value > max_rate ? max_rate :
value

必要に応じて、すべてを1行に入れることができます。読みやすさを目的として、そのようにしただけです

于 2012-11-24T09:46:39.190 に答える
1

三項代入は「よりコンパクト」ですが、間違いなくきれいではありません。

value = (value < min_rate) ? min_rate : (value > max_rate) ? max_rate : value
于 2012-11-09T14:22:54.867 に答える
0
class Range
  def limit(value)
    if value> last
      last
    elsif value< first
      first
    else
      value
    end
  end
end

p (-50..50).map{ |n| (10..20).limit(n) }.uniq== (10..20).to_a

$真

于 2012-11-24T08:35:43.190 に答える
0

ユーティリティ メソッドを使用して Range を拡張してみてください。

module RangeHelper
  def bound value
    value < self.begin ? self.begin :
    value > self.end   ? self.end :
    value
  end
end
Range.class_eval { include RangeHelper }

(1..10).bound 5  # => 5
(1..10).bound -5 # => 1
(1..10).bound 15 # => 10
于 2012-11-12T23:48:12.560 に答える
0

まあ、私は@pwnedに同意しますが、もっとエレガントな方法があります. 私見は同じことですが、より良い読み方があります。

  def calculate(value)
    return min_rate if value < min_rate
    return max_rate if value > max_rate
    value
  end

私はそのカスケードスタイルがまったく好きではありません。=)

于 2012-11-09T18:33:09.060 に答える