Feature #841
closedObject#self
Added by rubikitch (rubikitch .) almost 16 years ago. Updated about 8 years ago.
Description
=begin
自分自身を返すメソッドがあってもいいんじゃないでしょうか?
名前はRuby的にはself、Lispに倣うならばidentityとか。
class Object
def self; self end
end
1.self # => 1
"a".self # => "a"
=end
Files
tap-without-block.patch (727 Bytes) tap-without-block.patch | no6v (Nobuhiro IMAI), 12/11/2008 08:05 AM |
Updated by matz (Yukihiro Matsumoto) almost 16 years ago
=begin
まつもと ゆきひろです
In message "Re: [ruby-dev:37337] [Feature #841] Object#self"
on Wed, 10 Dec 2008 08:36:44 +0900, "rubikitch ." redmine@ruby-lang.org writes:
|自分自身を返すメソッドがあってもいいんじゃないでしょうか?
|名前はRuby的にはself、Lispに倣うならばidentityとか。
どういう風に使うんですか?
=end
Updated by usa (Usaku NAKAMURA) almost 16 years ago
=begin
こんにちは、なかむら(う)です。
In message "[ruby-dev:37342] Re: [Feature #841] Object#self"
on Dec.10,2008 15:18:29, matz@ruby-lang.org wrote:
|自分自身を返すメソッドがあってもいいんじゃないでしょうか?
|名前はRuby的にはself、Lispに倣うならばidentityとか。どういう風に使うんですか?
太古の昔に +@ をそのようにしようという提案があったようです。
※[ruby-dev:6416]
で、[ruby-dev:6450]で(具体的な使い方ではないですが)説明があり
ますね。
[ruby-dev:6441]でまつもとさんが「かなり前向き」と発言したけど
それっきりになったように見えるのですが、現在だとどう思われま
すか?
それでは。¶
U.Nakamura usa@garbagecollect.jp
=end
Updated by rubikitch (rubikitch .) almost 16 years ago
=begin
From: Yukihiro Matsumoto matz@ruby-lang.org
Subject: [ruby-dev:37342] Re: [Feature #841] Object#self
Date: Wed, 10 Dec 2008 15:18:29 +0900
|自分自身を返すメソッドがあってもいいんじゃないでしょうか?
|名前はRuby的にはself、Lispに倣うならばidentityとか。どういう風に使うんですか?
class Object
def self() self; end
end
自分自身を返すメソッドをaliasで作成する¶
class Test
alias foo self
end
Test.new.foo # => #Test:0x91aa1b8
ブロック {|x| x } を &:self と記述する¶
require 'scanf'
"abcd".scanf('%c%c') # => ["a", "b"]
"abcd".scanf('%c%c'){|a| a} # => [["a", "b"], ["c", "d"]]
"abcd".scanf('%c%c', &:self) # => [["a", "b"], ["c", "d"]]
--
rubikitch
Blog: http://d.hatena.ne.jp/rubikitch/
Site: http://www.rubyist.net/~rubikitch/
=end
Updated by matz (Yukihiro Matsumoto) almost 16 years ago
=begin
まつもと ゆきひろです
In message "Re: [ruby-dev:37346] Re: [Feature #841] Object#self"
on Wed, 10 Dec 2008 21:03:01 +0900, "U.Nakamura" usa@garbagecollect.jp writes:
|> どういう風に使うんですか?
|
|太古の昔に +@ をそのようにしようという提案があったようです。
|※[ruby-dev:6416]
|で、[ruby-dev:6450]で(具体的な使い方ではないですが)説明があり
|ますね。
|
|[ruby-dev:6441]でまつもとさんが「かなり前向き」と発言したけど
|それっきりになったように見えるのですが、現在だとどう思われま
|すか?
あの時ほど必要性を感じなくなってます。あれからずいぶん経つの
に結局必要なケースを見かけていないからです。さらにいえば「+@」
よりも「self」の方がさらに必要さを感じてません。
identityのユースケースでselfという名前がふさわしいものはない
ような気がします。
=end
Updated by matz (Yukihiro Matsumoto) almost 16 years ago
=begin
まつもと ゆきひろです
In message "Re: [ruby-dev:37347] Re: [Feature #841] Object#self"
on Wed, 10 Dec 2008 21:06:23 +0900, rubikitch@ruby-lang.org writes:
|> どういう風に使うんですか?
|# 自分自身を返すメソッドをaliasで作成する
|class Test
| alias foo self
|end
|Test.new.foo # => #Test:0x91aa1b8
|
|# ブロック {|x| x } を &:self と記述する
|require 'scanf'
|"abcd".scanf('%c%c') # => ["a", "b"]
|"abcd".scanf('%c%c'){|a| a} # => [["a", "b"], ["c", "d"]]
|"abcd".scanf('%c%c', &:self) # => [["a", "b"], ["c", "d"]]
前者はまったく必要性が理解できません。後者はselfという名前は
ふさわしくないと思います。さらに言えばわかりやすさが増してな
い(っていうかむしろ意図がわかりにくい)割にバイト数すら減って
ないし。
=end
Updated by matz (Yukihiro Matsumoto) almost 16 years ago
- Status changed from Open to Rejected
=begin
今回はreject。
別の名前と、その名前にふさわしいユースケースがあれば今後採用するかも。
=end
Updated by tadf (tadayoshi funaba) almost 16 years ago
=begin
今更感がありますが、あってもいいなと思っていました。何もしないメソッド
があると都合がいいこともあると思います。
class Object
def identity() self end
end
class Time
def to_s2(t=:identity) dup.send(t).to_s end
end
a = Time.now
p a.to_s2(:localtime)
p a.to_s2(:utc)
p a.to_s2
=end
Updated by matz (Yukihiro Matsumoto) almost 16 years ago
=begin
まつもと ゆきひろです
In message "Re: [ruby-dev:37354] Re: [Feature #841] Object#self"
on Thu, 11 Dec 2008 00:43:42 +0900, Tadayoshi Funaba tadf@dotrb.org writes:
|今更感がありますが、あってもいいなと思っていました。何もしないメソッド
|があると都合がいいこともあると思います。
「都合がいいこともある」ってのは分からないでもないんですが、
名前が気に入らないんで。selfもidentityもねぇ。
=end
Updated by no6v (Nobuhiro IMAI) almost 16 years ago
- File tap-without-block.patch tap-without-block.patch added
=begin
すでにあるものを利用ってことで、Object#tap がブロックなしでも呼べる、
というのはどうでしょうか?
array.send(hoge ? :sort : :tap).each{...}
のように、ソートが必要かどうかが実行時に決まる、みたいなケースはたまにあります。
array = array.sort if hoge
array.each{...}
と書けばいいのですが。
=end
Updated by matz (Yukihiro Matsumoto) almost 16 years ago
=begin
まつもと ゆきひろです
In message "Re: [ruby-dev:37361] [Feature #841] Object#self"
on Thu, 11 Dec 2008 07:58:23 +0900, Nobuhiro IMAI redmine@ruby-lang.org writes:
|すでにあるものを利用ってことで、Object#tap がブロックなしでも呼べる、
|というのはどうでしょうか?
tapって名前は変じゃないですか。
=end
Updated by no6v (Nobuhiro IMAI) almost 16 years ago
=begin
元の意味は tap into と書いてあるように「入り込む」なのかなと思いますが、
tap 自体に「軽く叩く」という意味もあるので、オブジェクトを軽く叩いたらその人
が返事するのは自然かも?というのは無理があるでしょうか :-)。
=end
Updated by usa (Usaku NAKAMURA) almost 16 years ago
=begin
こんにちは、なかむら(う)です。
In message "[ruby-dev:37351] Re: [Feature #841] Object#self"
on Dec.11,2008 00:04:33, matz@ruby-lang.org wrote:
前者はまったく必要性が理解できません。後者はselfという名前は
ふさわしくないと思います。さらに言えばわかりやすさが増してな
い(っていうかむしろ意図がわかりにくい)割にバイト数すら減って
ないし。
意図のわかりやすさはともかく、+@にこの機能を持たせると、括弧
が省略できるときに &:+@ は {|a|a} より1バイト短くなります。
... gorubyに入れとくか。
それでは。¶
U.Nakamura usa@garbagecollect.jp
=end
Updated by takahashim (Masayoshi Takahashi) about 8 years ago
- Description updated (diff)
このチケット、2.2でObject#itselfが導入されたことで肯定的に解決されたという理解であってるでしょうか。
https://ruby-doc.org/core-2.2.0/Object.html#method-i-itself
(検索したらこのチケットが出てきたので参考情報として書いておきます)