Как мне назначить переменную в хэш? - PullRequest
1 голос
/ 07 января 2012

Как бы я это сделал:

{:foo => ['foo', 'bar'] } 

foo - это действительная переменная, которая возвращает 123.То, что я действительно пытаюсь сделать, это:

{:1234 => ['foo', 'bar'] }

Ответы [ 3 ]

5 голосов
/ 07 января 2012

Вы пробовали использовать:

{foo => ['foo', 'bar'] }

Это приведет к хеш-элементу:

{123 => ['foo', 'bar'] }

и доступен из хеша с помощью 123 или foo.


Вы также можете разыгрывать трюки с Ruby's Hashes:

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]}
4 голосов
/ 07 января 2012

Я думаю число не может быть символом :

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] 
3 голосов
/ 07 января 2012

Ну, в хэше и ключом, и значением может быть любой объект.Вам просто нужно убедиться, что вы создаете действительный объект.:1234 не является допустимым символом.Вы можете использовать

x = {1234 => ['foo', 'bar']}

Для доступа к массиву используйте x[1234].

В другой ноте, если вы хотите использовать символ, он должен начинаться с символа, а не с цифры:

x = {:poke => ['foo', 'bar']}

И вы можете получить к нему доступ с помощью x[:poke].

Чаще всего ключом является: Fixnum, String или Symbol, но не ограничиваясь ими.

У вас также может быть какой-то абстрактный класс, который вы создали, и использовать его в качестве ключа, но у меня никогда не было необходимости в этом;не значит, что это не практично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...