ruby-dev (Japanese) list archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-dev:50329] [Ruby trunk Feature#14142] Add Method#===
       [not found] <redmine.issue-14142.20171129122601@ruby-lang.org>
@ 2017-11-29 12:26 ` manga.osyo
  2017-11-29 13:51 ` [ruby-dev:50330] " amirnaabuze
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 7+ messages in thread
From: manga.osyo @ 2017-11-29 12:26 UTC (permalink / raw)
  To: ruby-dev

Issue #14142 has been reported by osyo (manga osyo).

----------------------------------------
Feature #14142: Add Method#===
https://bugs.ruby-lang.org/issues/14142

* 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/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-dev:50330] [Ruby trunk Feature#14142] Add Method#===
       [not found] <redmine.issue-14142.20171129122601@ruby-lang.org>
  2017-11-29 12:26 ` [ruby-dev:50329] [Ruby trunk Feature#14142] Add Method#=== manga.osyo
@ 2017-11-29 13:51 ` amirnaabuze
  2017-11-29 13:52 ` [ruby-dev:50331] " amirnaabuze
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 7+ messages in thread
From: amirnaabuze @ 2017-11-29 13:51 UTC (permalink / raw)
  To: ruby-dev

Issue #14142 has been updated by MusinAR (Amir Musin).

File Выделение_008.png added

![](Выделение_008.png)

----------------------------------------
Feature #14142: Add Method#===
https://bugs.ruby-lang.org/issues/14142#change-68048

* 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)
Выделение_008.png (21.5 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-dev:50331] [Ruby trunk Feature#14142] Add Method#===
       [not found] <redmine.issue-14142.20171129122601@ruby-lang.org>
  2017-11-29 12:26 ` [ruby-dev:50329] [Ruby trunk Feature#14142] Add Method#=== manga.osyo
  2017-11-29 13:51 ` [ruby-dev:50330] " amirnaabuze
@ 2017-11-29 13:52 ` amirnaabuze
  2017-11-29 13:54 ` [ruby-dev:50332] " amirnaabuze
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 7+ messages in thread
From: amirnaabuze @ 2017-11-29 13:52 UTC (permalink / raw)
  To: ruby-dev

Issue #14142 has been updated by MusinAR (Amir Musin).

File test.png added

![](test.png)

----------------------------------------
Feature #14142: Add Method#===
https://bugs.ruby-lang.org/issues/14142#change-68049

* 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)
Выделение_008.png (21.5 KB)
test.png (57.9 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-dev:50332] [Ruby trunk Feature#14142] Add Method#===
       [not found] <redmine.issue-14142.20171129122601@ruby-lang.org>
                   ` (2 preceding siblings ...)
  2017-11-29 13:52 ` [ruby-dev:50331] " amirnaabuze
@ 2017-11-29 13:54 ` amirnaabuze
  2017-12-04 11:28 ` [ruby-dev:50336] " aycabta
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 7+ messages in thread
From: amirnaabuze @ 2017-11-29 13:54 UTC (permalink / raw)
  To: ruby-dev

Issue #14142 has been updated by MusinAR (Amir Musin).

File Выделение_008.png added

![](Выделение_008.png)

----------------------------------------
Feature #14142: Add Method#===
https://bugs.ruby-lang.org/issues/14142#change-68052

* 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)
Выделение_008.png (21.5 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-dev:50336] [Ruby trunk Feature#14142] Add Method#===
       [not found] <redmine.issue-14142.20171129122601@ruby-lang.org>
                   ` (3 preceding siblings ...)
  2017-11-29 13:54 ` [ruby-dev:50332] " amirnaabuze
@ 2017-12-04 11:28 ` aycabta
  2017-12-12  8:25 ` [ruby-dev:50344] " matz
  2017-12-17 15:02 ` [ruby-dev:50355] " manga.osyo
  6 siblings, 0 replies; 7+ messages in thread
From: aycabta @ 2017-12-04 11:28 UTC (permalink / raw)
  To: ruby-dev

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/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-dev:50344] [Ruby trunk Feature#14142] Add Method#===
       [not found] <redmine.issue-14142.20171129122601@ruby-lang.org>
                   ` (4 preceding siblings ...)
  2017-12-04 11:28 ` [ruby-dev:50336] " aycabta
@ 2017-12-12  8:25 ` matz
  2017-12-17 15:02 ` [ruby-dev:50355] " manga.osyo
  6 siblings, 0 replies; 7+ messages in thread
From: matz @ 2017-12-12  8:25 UTC (permalink / raw)
  To: ruby-dev

Issue #14142 has been updated by matz (Yukihiro Matsumoto).


LGTM.

Matz.


----------------------------------------
Feature #14142: Add Method#===
https://bugs.ruby-lang.org/issues/14142#change-68303

* 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/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-dev:50355] [Ruby trunk Feature#14142] Add Method#===
       [not found] <redmine.issue-14142.20171129122601@ruby-lang.org>
                   ` (5 preceding siblings ...)
  2017-12-12  8:25 ` [ruby-dev:50344] " matz
@ 2017-12-17 15:02 ` manga.osyo
  6 siblings, 0 replies; 7+ messages in thread
From: manga.osyo @ 2017-12-17 15:02 UTC (permalink / raw)
  To: ruby-dev

Issue #14142 has been updated by osyo (manga osyo).


返信が遅れてしまいましたが、ありがとうございました。

----------------------------------------
Feature #14142: Add Method#===
https://bugs.ruby-lang.org/issues/14142#change-68468

* Author: osyo (manga osyo)
* Status: Closed
* 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/

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-12-17 15:02 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <redmine.issue-14142.20171129122601@ruby-lang.org>
2017-11-29 12:26 ` [ruby-dev:50329] [Ruby trunk Feature#14142] Add Method#=== manga.osyo
2017-11-29 13:51 ` [ruby-dev:50330] " amirnaabuze
2017-11-29 13:52 ` [ruby-dev:50331] " amirnaabuze
2017-11-29 13:54 ` [ruby-dev:50332] " amirnaabuze
2017-12-04 11:28 ` [ruby-dev:50336] " aycabta
2017-12-12  8:25 ` [ruby-dev:50344] " matz
2017-12-17 15:02 ` [ruby-dev:50355] " manga.osyo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).