Ruby:如何将对象名称传递给数组而不是ID

时间:2015-03-22 17:17:44

标签: ruby arrays

如果我创建两个这样的对象:

foo = foo.new
bar = bar.new

并且想要将对象foo的名称存储在bar中的数组中,我该怎么做?

例如,如果我将foo传递给bar中的以下方法:

def to_array arg
  fooarray << arg
end

我怎样才能得到它所以方法&#39; to_array&#39;存储名称&#39; foo&#39;在数组内部,而不是对象的实例ID?

所以数组看起来像这样:

['foo', 'foo2', 'foo3' etc..]

而不是

[#<foo:0x00..., #foo2:0x00..., etc..]

我真的希望这是有道理的。我是Ruby的新手,所以我可能不会说清楚。

3 个答案:

答案 0 :(得分:1)

要获取对象类的名称,可以使用class方法。像这样:

fooOne = Foo.new
fooOne.class.to_s # returns the string 'Foo'

你可以在Foo上定义一个type方法来简化这个方法。至于在将foo对象放入数组时返回此值,我同意其他海报map是更好的选择。

答案 1 :(得分:0)

我猜你只是想保留变量名的数组?或者是&#39; name&#39; foo的一个属性。如果它是前者,为什么不保留一个在创建对象时追加的运行数组,即arg将是变量名而不是对象。如果是后来的名字&#39;是foo的一种方法,那么你总是可以在对象数组上使用map:

bar =  [#<foo:0x00..., #foo2:0x00..., etc..].map(&:name)

> ['foo', 'foo1',..., 'fooN']

def to_array arg
  fooarray << arg.name
end

答案 2 :(得分:0)

也许使用哈希代替?根据你拥有的数量,一次添加一个对象可能会有点痛苦,但是回报是它会给你你想要的东西(或许更多)....万一你不熟悉哈希(你说你是新的)这里是你如何做到的:

创建哈希,我将调用我的哈希变量&#39;

variables = {}

将项目添加到哈希使用:hash_name [&#39; key_name&#39;] =&#39; value&#39;。

variables['var1'] = 'something1'
variables['var2'] = 'something2'
variables['var3'] = 'something3'

如果您有一个如下所示的变量:

foo = 'foobar' 
#then 'foo' would be the key_name and 'foobar' would be the value.

创建哈希后,要查看整个哈希值,包括键和值:

puts variables
#=> {"var1"=>"something1", "var2"=>"something2", "var3"=>"something3"} 

仅查看按键:

puts variables.keys
# => var1 
# => var2
# => var3

仅查看值:

puts variables.values
# => something1
# => something2
# => something3

查看一个特定密钥中的内容:

puts variables['var3']
# => something3

如果你出于某种原因需要一个只有你的密钥(对象)名称的数组,你可以通过创建一个数组并立即将所有密钥推入其中来轻松地做到这一点:

all_vars_array = []
all_vars_array << variables.keys #pushes ALL the keys of your hash into your array.

puts all_vars_array
# => ['var1', 'var2', 'var3']

所以你看,根据你的工作,构建一个哈希可能是值得的。