我将如何做到这一点:如何将var分配到散列?
{:foo => ['foo', 'bar'] }
foo
是一个实际的变量,它返回123
。我真正想做的是:
{:1234 => ['foo', 'bar'] }
我将如何做到这一点:如何将var分配到散列?
{:foo => ['foo', 'bar'] }
foo
是一个实际的变量,它返回123
。我真正想做的是:
{:1234 => ['foo', 'bar'] }
那么,在一个散列中,键和值都可以是任何对象。你只需要确保你正在创建一个有效的对象。 :1234
不是有效的符号。您可以使用
x = {1234 => ['foo', 'bar']}
您可以使用x[1234]
访问该阵列。
在另一方面,如果你想使用一个符号,它必须以字符开始,而不是一个数字:
x = {:poke => ['foo', 'bar']}
你将它用x[:poke]
访问。
最常见的关键是:Fixnum
,String
或Symbol
,但不限于它们。你也可以有一些你创建的抽象类,并用它作为关键,但我从来没有这样的需要;并不意味着它不实际。
您是否尝试过使用:
{foo => ['foo', 'bar'] }
这将导致一个哈希元素:
{123 => ['foo', 'bar'] }
,可从哈希使用或者123
或foo
访问。
您还可以在Ruby的哈希表做手脚:
foo = 123 # => 123
{ foo => [1,2] } # => {123=>[1, 2]}
{ :123 => [1,2] }
SyntaxError: (irb):3: syntax error, unexpected tINTEGER, expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END
{ :123 => [1,2] }
^
{ foo.to_sym => [1,2] }
NoMethodError: undefined method `to_sym' for 123:Fixnum
{ foo.to_s.to_sym => [1,2] } # => {:"123"=>[1, 2]}
{ :"123" => [1,2] } # => {:"123"=>[1, 2]}
啊,您的观点更重要。 〜好吧,我会离开我的。有人可能会发现它“教育”。 – omninonsense 2012-01-07 18:33:29
我觉得一个数字,不能是一个符号:
ruby-1.9.2-p0 > :1
SyntaxError: (irb):7: syntax error, unexpected tINTEGER, expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END
如果你不小心使用适当的符号,你可以这样做:
ruby-1.9.2-p0 > foo = "wadus"
=> "wadus"
ruby-1.9.2-p0 > { foo.to_sym => [1,2] }
=> {:wadus=>[1, 2]}
ruby-1.9.2-p0 > { foo.to_sym => [1,2] }[:wadus]
=> [1, 2]
数字字符串可以是符号。你只需要使用正确的语法,如':“123”',这相当于''123“.to_sym',它在功能上等同于'123.to_s.to_sym'。 – 2012-01-07 22:40:50
你打我4分钟:) – fguillen 2012-01-07 18:36:34
@fguillen我没有真正打扰提供任何证据。所以,你的答案可能比我的准确一些。 :) – omninonsense 2012-01-07 18:40:13
所有有效的答案,但是,':1234'不是一个有效的符号。感谢您的支持 – 2012-01-07 20:27:31