gpt4 book ai didi

java - Ruby 类实例上的等效操作(对于 Java)

转载 作者:太空宇宙 更新时间:2023-11-04 07:24:51 25 4
gpt4 key购买 nike

我是一名 Java 人员,并且长期使用 C 语言,正在尝试学习 Ruby。至少可以说,这是一次令人羞愧的经历。

我有以下类(class)。

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 符号而不是字符串作为 key 。)

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 类。或者说,这是错误的想法?如果您有时间,请调整我的类定义和/或我想用它做什么,或者总体批评。非常感谢!

最佳答案

这是您的 ruby​​ 类,

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,因此您需要放入 definitialize,它是该类的构造函数。

关于java - Ruby 类实例上的等效操作(对于 Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18707223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com