我將如何做到這一點:如何將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