Как бы я это сделать:Как назначить 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
Я думаю число не может быть символом:
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'. –
Ты бил меня в течение 4 минут :) – fguillen
@fguillen Я действительно не удосужился предоставить какие-либо доказательства. Итак, ваш ответ, вероятно, немного точнее моего. :) – omninonsense
Все действительные ответы, но да, ': 1234' не является допустимым символом. Спасибо, что очистили это. –