Feature #5549
closedComparable#min, Comparable#max
Description
I request the following methods
Comparable#min(other)
Comparable#max(other)
which will work the same as
[self, other].min
[self, other].max
and can be defined as
module Comparable
def min other; [self, other].min end
def max other; [self, other].max end
end
Example use case: If you need to ensure that some calculated value becomes at least zero within a method chain.
Updated by matz (Yukihiro Matsumoto) about 13 years ago
- Status changed from Open to Rejected
なぜ、それが必要だと思いましたか?
この提案だと a.min(b) というスタイルになり、Enumerableの「もっとも小さい(大きい)要素を返す」という意味でなく、「ふたつの要素のうちより小さい(大きい)ものを返す」と記述しています。そのような記述のための語彙としてはmin,maxではなく、比較演算子 >, < を使うのだと思いますし、そのメソッドはすでにComparableに定義されています。
Updated by nobu (Nobuyoshi Nakada) about 13 years ago
なかだです。
At Thu, 3 Nov 2011 19:52:44 +0900,
Yukihiro Matsumoto wrote in [ruby-dev:44793]:
この提案だと a.min(b) というスタイルになり、Enumerableの「もっ
とも小さい(大きい)要素を返す」という意味でなく、「ふたつの要素
のうちより小さい(大きい)ものを返す」と記述しています。そのよう
な記述のための語彙としてはmin,maxではなく、比較演算子 >, < を
使うのだと思いますし、そのメソッドはすでにComparableに定義され
ています。
これは
Example use case: If you need to ensure that some calculated
value becomes at least zero within a method chain.
ということで、メソッドチェーンに追加する形で使いたいということが
大きいのでしょう。
some_method.and_another.yet_another.min(0).max(100)
ただ、この例ではmin,maxという名前はあまりふさわしくないように思
います。サチュレーションとかクリッピングとか呼ばれることが多い気
がします。
some_method.clip_by(0..100)
とか。片方向のみの場合にうまくありませんが。
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦
Updated by mame (Yusuke Endoh) about 13 years ago
遠藤です。
2011年11月7日11:34 Nobuyoshi Nakada nobu@ruby-lang.org:
ただ、この例ではmin,maxという名前はあまりふさわしくないように思
います。サチュレーションとかクリッピングとか呼ばれることが多い気
がします。some_method.clip_by(0..100)
#4574 でまさにそういう操作をする Numeric#within というメソッドを
提案しましたが、そこで聞いた話だと、こういう操作は一般的に clamp
と呼ばれるそうです。
--
Yusuke Endoh mame@tsg.ne.jp