что не так с этим рубиновым хешем? - PullRequest
0 голосов
/ 18 июня 2010

Я довольно новичок в ruby, я получаю следующую ошибку:

in gem_original_require': ./helpers/navigation.rb:28: odd number list for Hash (SyntaxError)

Любая помощь приветствуется ...

   module Sinatra::Navigation

        def navigation

            @navigation

                nav = {

                        primary[0] = {
                         :title => "cheddar",
                         :active => false,
                         :children => {
                           { :title => "cheese", :active => false },
                           { :title => "ham", :active => false }
                          }
                        },

                        primary[1] = {
                         :title => "gorgonzola",
                         :active => false,
                         :children => {
                           { :title => "What is the cheese?", :active => false },
                           { :title => "What cheese", :active => false },
                           { :title => "What does the cheese tell us?", :active => false, :children => {
                              { :title => "Cheessus", :active => false },
                              { :title => "The impact of different cheeses / characteristics for cheese in relation to CHSE outcomes", :active => false }
                            }
                           }
                          }
                        }
                }

Ответы [ 3 ]

6 голосов
/ 18 июня 2010

В ruby ​​фигурные скобки используются для описания хэш-карты, состоящей из пар ключей и значений. Квадратные скобки используются для описания массивов. Ваш дочерний атрибут не содержит пар ключ-значение, поэтому вы должны создать массив вместо хеша.

Так что вместо

:children => {
  { :title => "cheese", :active => false },
  { :title => "ham", :active => false }
}

сделать:

:children => [
  { :title => "cheese", :active => false },
  { :title => "ham", :active => false }
]

И то же самое для другого случая :children.

Я также не уверен, чего должен достичь primary[0] =, но он почти наверняка не делает того, чего вы хотите. Что он делает, так это назначает, устанавливает первый элемент primary (что означает, что массив с именем primary должен существовать до этого назначения), а затем возвращает этот элемент.

Если вы хотите структурировать свой хеш так, чтобы к нему можно было обращаться, например, nav[:primary][0][:children][0], вы должны сделать это следующим образом:

nav = {
  :primary => [
    {:title => "cheddar",
     :active => false,
     :children => [
                    { :title => "cheese", :active => false },
                    { :title => "ham", :active => false }
                  ]
    },
    {
       :title => "gorgonzola",
       #...
    }]
}

Также обратите внимание, что строка @navigation непосредственно перед назначением nav вообще ничего не делает.

1 голос
/ 18 июня 2010

Я думаю, вы можете путать массивы с хешами. Есть (я думаю) две точки, в которых вы, вероятно, хотите использовать массив [] вместо хеша {}. Исправлен код следующим образом:

nav = [
       { :title => "cheddar",
         :active => false,
         :children => [
            { :title => "cheese", :active => false },
            { :title => "ham", :active => false }
           ]
        },
        { :title => "gorgonzola",
          :active => false,
          :children => [
           { :title => "What is the cheese?", :active => false },
           { :title => "What cheese", :active => false },
           { :title => "What does the cheese tell us?", :active => false, 
             :children => [
               { :title => "Cheessus", :active => false },
               { :title => "The impact of different cheeses / characteristics for cheese in relation to CHSE outcomes", :active => false }
            ]
          }]
        }
     ]
1 голос
/ 18 июня 2010

В первом хеше у вас есть

:children => {
    { :title => "cheese", :active => false },
    { :title => "ham", :active => false }
}

Ваш: детский хеш должен быть массивом, построенным из квадратных скобок вместо фигурных скобок:)

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