1

我是一名 Java 和长期 C 人,试图学习 Ruby。至少可以说,这是一次令人羞愧的经历。

我有以下课程。

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 initializewhich 是类的构造函数。

于 2013-09-09T21:25:57.220 回答