Project

General

Profile

Actions

Feature #841

closed

Object#self

Added by rubikitch (rubikitch .) over 15 years ago. Updated over 7 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
[ruby-dev:37337]

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
Actions #1

Updated by matz (Yukihiro Matsumoto) over 15 years ago

=begin
まつもと ゆきひろです

In message "Re: [ruby-dev:37337] [Feature #841] Object#self"
on Wed, 10 Dec 2008 08:36:44 +0900, "rubikitch ." writes:

|自分自身を返すメソッドがあってもいいんじゃないでしょうか?
|名前はRuby的にはself、Lispに倣うならばidentityとか。

どういう風に使うんですか?

=end

Actions #2

Updated by usa (Usaku NAKAMURA) over 15 years ago

=begin
こんにちは、なかむら(う)です。

In message "[ruby-dev:37342] Re: [Feature #841] Object#self"
on Dec.10,2008 15:18:29, wrote:

|自分自身を返すメソッドがあってもいいんじゃないでしょうか?
|名前はRuby的にはself、Lispに倣うならばidentityとか。

どういう風に使うんですか?

太古の昔に +@ をそのようにしようという提案があったようです。
[ruby-dev:6416]
で、[ruby-dev:6450]で(具体的な使い方ではないですが)説明があり
ますね。

[ruby-dev:6441]でまつもとさんが「かなり前向き」と発言したけど
それっきりになったように見えるのですが、現在だとどう思われま
すか?

それでは。

U.Nakamura

=end

Actions #3

Updated by rubikitch (rubikitch .) over 15 years ago

=begin
From: Yukihiro Matsumoto
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

Actions #4

Updated by matz (Yukihiro Matsumoto) over 15 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" writes:

|> どういう風に使うんですか?
|
|太古の昔に +@ をそのようにしようという提案があったようです。
|※[ruby-dev:6416]
|で、[ruby-dev:6450]で(具体的な使い方ではないですが)説明があり
|ますね。
|
|[ruby-dev:6441]でまつもとさんが「かなり前向き」と発言したけど
|それっきりになったように見えるのですが、現在だとどう思われま
|すか?

あの時ほど必要性を感じなくなってます。あれからずいぶん経つの
に結局必要なケースを見かけていないからです。さらにいえば「+@」
よりも「self」の方がさらに必要さを感じてません。

identityのユースケースでselfという名前がふさわしいものはない
ような気がします。

=end

Actions #5

Updated by matz (Yukihiro Matsumoto) over 15 years ago

=begin
まつもと ゆきひろです

In message "Re: [ruby-dev:37347] Re: [Feature #841] Object#self"
on Wed, 10 Dec 2008 21:06:23 +0900, 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

Actions #6

Updated by matz (Yukihiro Matsumoto) over 15 years ago

  • Status changed from Open to Rejected

=begin
今回はreject。
別の名前と、その名前にふさわしいユースケースがあれば今後採用するかも。

=end

Actions #7

Updated by tadf (tadayoshi funaba) over 15 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

Actions #8

Updated by matz (Yukihiro Matsumoto) over 15 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 writes:

|今更感がありますが、あってもいいなと思っていました。何もしないメソッド
|があると都合がいいこともあると思います。

「都合がいいこともある」ってのは分からないでもないんですが、
名前が気に入らないんで。selfもidentityもねぇ。

=end

Actions #9

Updated by no6v (Nobuhiro IMAI) over 15 years ago

=begin
すでにあるものを利用ってことで、Object#tap がブロックなしでも呼べる、
というのはどうでしょうか?

array.send(hoge ? :sort : :tap).each{...}

のように、ソートが必要かどうかが実行時に決まる、みたいなケースはたまにあります。

array = array.sort if hoge
array.each{...}

と書けばいいのですが。

=end

Actions #10

Updated by matz (Yukihiro Matsumoto) over 15 years ago

=begin
まつもと ゆきひろです

In message "Re: [ruby-dev:37361] [Feature #841] Object#self"
on Thu, 11 Dec 2008 07:58:23 +0900, Nobuhiro IMAI writes:

|すでにあるものを利用ってことで、Object#tap がブロックなしでも呼べる、
|というのはどうでしょうか?

tapって名前は変じゃないですか。

=end

Actions #11

Updated by no6v (Nobuhiro IMAI) over 15 years ago

=begin
元の意味は tap into と書いてあるように「入り込む」なのかなと思いますが、
tap 自体に「軽く叩く」という意味もあるので、オブジェクトを軽く叩いたらその人
が返事するのは自然かも?というのは無理があるでしょうか :-)。

=end

Actions #12

Updated by usa (Usaku NAKAMURA) over 15 years ago

=begin
こんにちは、なかむら(う)です。

In message "[ruby-dev:37351] Re: [Feature #841] Object#self"
on Dec.11,2008 00:04:33, wrote:

前者はまったく必要性が理解できません。後者はselfという名前は
ふさわしくないと思います。さらに言えばわかりやすさが増してな
い(っていうかむしろ意図がわかりにくい)割にバイト数すら減って
ないし。

意図のわかりやすさはともかく、+@にこの機能を持たせると、括弧
が省略できるときに &:+@ は {|a|a} より1バイト短くなります。

... gorubyに入れとくか。

それでは。

U.Nakamura

=end

Updated by takahashim (Masayoshi Takahashi) over 7 years ago

  • Description updated (diff)

このチケット、2.2でObject#itselfが導入されたことで肯定的に解決されたという理解であってるでしょうか。
https://ruby-doc.org/core-2.2.0/Object.html#method-i-itself

(検索したらこのチケットが出てきたので参考情報として書いておきます)

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0