1

私は、シンボル :DEFAULT、:say、および :@message を使用して「識別子を検索する」と述べているブログ エントリから、この例の Ruby コードを理解しようとしています。しかし、私が知る限り、それは識別子ではなく、それらの識別子に関連付けられた値を検索しています。識別子は変数、メソッドなどの名前だと思いました。したがって、識別子は「DEFAULT」、「say」、および「message」になりますか? プログラムの出力は以下のとおりです。

また、なぜ識別子を調べる必要があるのでしょうか?

class Demo
  # The stuff we'll look up.
  DEFAULT = "Hello"
  def initialize
    @message = DEFAULT
  end
  def say() @message end

  # Use symbols to look up identifiers.
  def look_up_with_symbols
    [Demo.const_get(:DEFAULT),
     method(:say),
     instance_variable_get(:@message)]
  end
end

dem = Demo.new
puts dem.look_up_with_symbols

コードを実行すると、次の出力が得られます。

Hello
#<Method: Demo#say>
Hello
4

2 に答える 2

0

はい、これらはさまざまな識別子の値を検索します。

何をしようとしているのか正確にはわかりませんが、シンボル (:DEFAULT) を文字列 ("DEFAULT") に変換する必要がある場合は、to_s (:DEFAULT.to__s) を使用してください。可能なすべての識別子を調べたい場合は、探しているものによって異なります。

myobject.methods  # show a list of instance methods an object has (like "say" above)
myobject.instance_variables  # show a list of instance variables an object has (like "@message" above)
myobject.class.constants  # show a list of class level constants (like "DEFAULT" above)

新しい API をデバッグしたり試したりするときに、これらのメソッドを最大限に活用しています。おそらくプロダクション コードでこれらを使用する唯一の理由は、オブジェクトのある種の自動文字列表現 (XML、HTML、CSV) を出力するためです。

于 2009-03-18T21:12:18.667 に答える