1

私は Java と Ruby を学ぼうとしている長年の C の男です。控えめに言っても、それは謙虚な経験です。

私は次のクラスを持っています。

class Node
  @@normal
  def get_normal( n )
    @@normal[ :#n ]
  end
  def add_normal( n, value )
    @@normal[ :#{n} ] = value
  end
end

...そして、おそらく Java の専門家だけが使用する方法で使用しようとしていますが、おそらくあなたは私を正すことができます. (Javaでは、次のようになります:

class Node
{
   private Map< String, String > normal = new HashMap< String, String >();

   public void addToNormal( String key, String value ) { this.normal.put( key, value ); }
   public String getNormal( String key )               { return this.normal.get( key ); }
}
...
Node node = new Node();
node.addToNormal( "city", "New Orleans" );
System.out.println( node.getNormal( "city" );

)

以下では、「ニューオーリンズ」を取り出そうとしていると思いますが、うまくいきません。(注: 意図的に、キーに文字列の代わりに Ruby シンボルを使用しようとしています。)

irb(main):001:0> class Node
irb(main):002:1>   @@normal
irb(main):003:1>   def add_normal( n, value )
irb(main):004:2>     @@normal[ :#{n} ] = value
irb(main):005:3*   end
irb(main):006:3>   def get_normal( n )
irb(main):007:4>     @@normal[ :#n ]
irb(main):008:5*   end
irb(main):009:5> end
irb(main):010:4> node = Node.new()
irb(main):011:4> node.add_normal( :city, "New Orleans" )
irb(main):012:4> puts node.get_normal
irb(main):013:4> puts node.get_normal()

要するに、私はこれから何も得られません。

Ruby シンボルをハッシュのキーとして使用することを組み込みたいのですが、私が学びたい最も重要なことは、上記の Java クラスを使用する方法で Ruby クラスを使用することです。それとも、これは頭がおかしいということですか?時間を割いていただける場合は、私のクラス定義および/または私がそれでやろうとしていることを調整するか、一般的に批判してください。どうもありがとうございました!

4

1 に答える 1

1

ここにあなたのルビークラスがあります、

class Node
  def initialize
    @normal = {}
  end

  def get_normal(n)
    @normal[:n]
  end

  def add_normal(n, value)
    @normal[:n] = value
  end
end

そしてあなたのirbでは、

node = Node.new
node.add_normal(:city, "New Orleans")
puts node.get_normal(:city)

カップルメモ、

  • そのようなもののためのクラス変数ではなく、インスタンス変数を使用したい。インスタンス変数は@my_var、クラス変数は@@my_var

@normal = {}クラスレベルで抜けるとnil実行時になるのでdef initialize、クラスのコンストラクタである whichを入れます。

于 2013-09-09T21:25:57.220 に答える