Feature #841
closed
=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
=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
=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
=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
- Status changed from Open to Rejected
=begin
今回はreject。
別の名前と、その名前にふさわしいユースケースがあれば今後採用するかも。
=end
=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
=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
=begin
すでにあるものを利用ってことで、Object#tap がブロックなしでも呼べる、
というのはどうでしょうか?
array.send(hoge ? :sort : :tap).each{...}
のように、ソートが必要かどうかが実行時に決まる、みたいなケースはたまにあります。
array = array.sort if hoge
array.each{...}
と書けばいいのですが。
=end
=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
=begin
元の意味は tap into と書いてあるように「入り込む」なのかなと思いますが、
tap 自体に「軽く叩く」という意味もあるので、オブジェクトを軽く叩いたらその人
が返事するのは自然かも?というのは無理があるでしょうか :-)。
=end
=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
- Description updated (diff)
Also available in: Atom
PDF