новое объявление хэша в ruby, возвращающее синтаксические ошибки по сравнению с командной строкой - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь объявить новый хеш в ruby ​​с двумя ключами и массивами как значения для соответствующих ключей. Проблема, которую я не понимаю, заключается в том, что когда я запускаю его в командной строке pry, т.е. он не выдает синтаксической ошибки по сравнению с тем, когда я запускаю файл .rb. Мои коды ниже.

[1] pry(main)> newhash = {
[1] pry(main)*   N: ["unsq", "34n","28"],
[1] pry(main)*   L: ["aston", "timesq", "place"]
[1] pry(main)* }
 => {:N=>["unsq", "34n", "28"], :L=>["aston", "timesq", "place"]}
[2] pry(main)> newhash[:N]
 => ["unsq", "34n", "28"]
[3] pry(main)> newhash[:N][1] #returns the correct values
 => "34n" #returns the correct values

Когда я объявляю новый хеш в файле .rb, используя тот же синтаксис, он возвращает ошибку,

mtahash = {
  N : ["timesq", "34thn", "28thn", "23rdn", "Union_Square", "8th"],
  L : ["8th", "6th", "Union_Square", "3rd", "1st"],
  }
puts mtahash[:N]
puts mtahash[:N][4]

Ошибка запуска и выброса как,

MTA.rb:2: syntax error, unexpected ':', expecting =>
  N : ["Times_Square", "34thn", "2...
   ^
MTA.rb:2: syntax error, unexpected ',', expecting end-of-input
...23rdn", "Union_Square", "8th"],
...                              ^
Farwas-MBP:day2 farwaabid$ ruby MTA.rb
MTA.rb:2: syntax error, unexpected ':', expecting =>
N : ["timesq", "34thn", "28thn",...
^
MTA.rb:2: syntax error, unexpected ',', expecting end-of-input
...23rdn", "Union_Square", "8th"],
...                              ^

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Вы ставите пробел между ключом и двоеточием, попробуйте без него:

N: ["timesq", "34thn", "28thn", "23rdn", "Union_Square", "8th"],

и т.д.

0 голосов
/ 08 января 2019

{ a: 23 } сокращенно для { :a => 23 } только для символьных клавиш. И вы не можете поставить пробел так, чтобы a: было действительным, но не a :.

Кроме того, использование заглавной формы для символа не является предпочтительным (даже если он работает) в соответствии с соглашением о рубине, поэтому используйте :n вместо :N.

0 голосов
/ 08 января 2019

Без пробелов перед :. Отойти от

mtahash = {
  N : ["timesq", "34thn", "28thn", "23rdn", "Union_Square", "8th"],
  L : ["8th", "6th", "Union_Square", "3rd", "1st"],
  }

до

mtahash = {
  N: ["timesq", "34thn", "28thn", "23rdn", "Union_Square", "8th"],
  L: ["8th", "6th", "Union_Square", "3rd", "1st"],
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...