1

多くの場合、同じメソッド X が異なるオブジェクト A、B、C から呼び出されます。メソッド X 内から呼び出し元オブジェクト (A、B、C) の名前を取得することは可能ですか?

例:

class Sample
  def method
    # what needs to be done here?
  end
end

n1 = Sample.new
n2 = Sample.new

n1.method #=> expected output is to print n1
n2.method #=> expected output is to print n2
4

4 に答える 4

5

いいえ、これはうまくいきません。以下をイメージングします。

n1 = Sample.new
n2 = n1

n2.method #=> ambiguous, both n1 and n2 would be valid

代わりに、インスタンスに名前を割り当てることができます。

class Sample
  attr_accessor :name
end

n1 = Sample.new
n1.name = :n1

n2 = Sample.new
n2.name = :n2


n1.name #=> :n1
n2.name #=> :n2
于 2013-09-06T07:04:05.120 に答える
3

どのオブジェクトも object_id で識別できます。

class Sample
  def method
    puts self.object_id
  end
end

n1 = Sample.new
n2 = Sample.new

puts n1.object_id
n1.method

puts n2.object_id
n2.method

--output:--
2152302060
2152302060
2152302040
2152302040

変数名...それほど多くはありません。

于 2013-09-06T07:58:06.157 に答える
0

戻るだけselfでうまくいくはずですが、

次に例を示します。

class Sample
  attr_accessor :name
  def method
    puts self  
    puts self.name  
  end
end

n1 = Sample.new
n1.name = "Bangalore"
n2 = Sample.new
n2.name = "Chennai"


n1.method #=> expected output is to print n1
n2.method #=> expected output is to print n2


-------
Output: 
#<Sample:0x7f492f62c030> # n1 object
Bangalore # n1.name 
#<Sample:0x7f492f62bec8> # n2 object
Chennai #n2.name
于 2013-09-06T11:55:11.577 に答える