< :前の番号
^ :番号順リスト
> :次の番号
P :前の記事(スレッド移動)
N :次の記事(スレッド移動)
|<:前のスレッド
>|:次のスレッド
^ :返事先
_:自分への返事
>:同じ返事先を持つ記事(前)
<:同じ返事先を持つ記事(後)
---:分割してスレッド表示、再表示
| :分割して(縦)スレッド表示、再表示
~ :スレッドのフレーム消去
.:インデックス
..:インデックスのインデックス
Issue #14142 has been updated by aycabta (ayca bta).
```ruby
case value
when proc { |v| receiver.hoge(v) }
end
```
とすることもできますが、この issue にあるパッチで実現される方法のほうが Rubyish で良いと思います。
```ruby
case value
when receiver.method(:hoge).to_proc
end
```
とすれば今でも意図と同じものは可能ですが、微妙に Proc っぽいけど Proc じゃない Method のために #to_proc を呼び出しているだけであり、これは #=== が存在すればより良くなると思います。
余談: この件は issue を立てた本人から以前より聞いていました。2 週間ほど前、シアトルに行った時に @zenspider にこの件を相談したのですが、「Method にも #curry があってそれは Proc を返す。そういう Proc との交換可能性みたいなものも見られるのに Proc#=== があって Method#=== が無いのは確かに中途半端だね」という話をしました。確かに Method#=== を入れたほうがいい理由はいくらでもありそうに思います。
----------------------------------------
Feature #14142: Add Method#===
https://bugs.ruby-lang.org/issues/14142#change-68184
* Author: osyo (manga osyo)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
----------------------------------------
## 概要
Ruby の `Method` クラスに対する提案になります。
初めてこちらを利用するので内容や書き方などに対する問題があれば教えていただけると助かります。
## 提案
`Method#call` と同等の `Method#===` を定義する。
## 理由
`Proc` では `Proc#===` が `Proc#call` の同等のメソッドとして定義されています。
`Method` が `Proc` のように振る舞うことを期待するのであれば、`Proc#===` と同等の `Method#===` が定義されている方がよいのではないでしょうか。
## ユースケース
以下のようにして `Proc` と同様に `when` で使用する事が出来るようになります。
```ruby
# when で使用する
def check value
case value
when 0.method(:<)
"plus"
when 0.method(:>)
"minus"
when 0.method(:==)
"zero"
end
end
p check 3 # => "plus"
p check -6 # => "minus"
p check 0 # => "zero"
```
## 問題点
`Method#===` が `Object#===` を呼び出すことを期待しているようなコードであれば意図しない動作になる可能性があります。
---Files--------------------------------
add_method_eqq.patch (1.06 KB)
--
https://bugs.ruby-lang.org/