0

クラスのメソッドでクラスにアプローチした変数の名前を取得したい。そのように:

class Object
  def my_val
    "#{???} = '#{self.to_s}'"
  end
end

a1 = "val1"
a1.my_val # = a1 = 'val1'
a2 = "val2"
a2.my_val # = a2 = 'val2' 

私はそれを行うことができますか?

4

2 に答える 2

3

オブジェクトは、どの変数に格納されているか、または格納されていないかを認識していません。多くの場合、これはまったく意味のない概念です。

ここで何が起こると思いますか?

ref = Object.new
another_ref = ref
@ref = another_ref
hash = { key: @ref }
array = [ hash[:key] ]
array[0].my_val
# => ...?

オブジェクトを参照する方法はたくさんあります。どの名前が使用されているかを知ることは重要ではありません。

一般的に言えば、変数は、問題のオブジェクトにとって重要ではない任意の名前が付けられた単なる参照です。

あなたができることは、コンテキストを提供することです:

my_var = "test"
my_var.my_val(:my_var)
# => my_var="test"

次のように実装されます。

def my_var(name)
  "#{name}=#{self.inspect}"
end

これを少しロールアップして、賢くすることもできます。

def dump_var(name)
  "%s=%s" % [ name, instance_variable_get(:"@#{name}").inspect ]
end

それで:

@foo = "test"
dump_var(:foo)
# => foo="test"
于 2013-10-18T15:55:47.333 に答える
0

短い答えは「いいえ、できません:/」だと思います。

Ruby (およびほとんどの言語) では、変数名に意味はありません。変数名に関するヒントを提供できるのはコンパイラだけであり、Ruby 内とはまったく別の抽象化レベルにあります。

于 2013-10-18T15:53:58.137 に答える