Синтаксическая ошибка, неожиданная '=' - PullRequest
1 голос
/ 25 августа 2010

У меня есть следующее как часть класса

def to_s
   i = 0
   first_line? = true
   output = ''
   @selections.each do | selection |
      i += 1
      if first_line?
         output << selection.to_s(first_line?)
         first_line? = false
      else
         output << selection.to_s
      end
      if i >= 5
         output << "\r"
         i = 0
      else (output << " $ ")
      end
   end
   return output
end 

И я получаю следующие синтаксические ошибки

SyntaxError: list2sel.rb:45: syntax error, unexpected '='
    first_line? = true
                 ^
list2sel.rb:47: syntax error, unexpected keyword_do_block, expecting keyword_end
    @selections.each do | selection |
                       ^
list2sel.rb:51: syntax error, unexpected '='
        first_line? = false
                     ^

Что дает, также спасибо заранее, это ведет меняорехи.

Ответы [ 4 ]

4 голосов
/ 25 августа 2010

Полагаю, вы не можете называть переменные с помощью '?'в конце.

3 голосов
/ 25 августа 2010

Имена переменных (с некоторыми исключениями, отмеченными ниже) могут содержать только буквы, цифры и подчеркивание.(Кроме того, они должны начинаться с буквы или знака подчеркивания; они не могут начинаться с цифры.) Вы не можете использовать ? или ! в имени переменной.

Помимо этого правила,в Ruby существует соглашение strong , что вопросительный знак в конце чего-либо указывает на метод, который возвращает логическое значение:

4.nil? # => returns false....

Так что, даже если вы можете использовать его, переменнаякак first_line? может запутать (а потом раздражать), черт возьми, рубинов.Они ожидают, что это будет метод проверки, является ли что-то первой строкой чего-либо (что бы это ни значило в контексте).

Исключения в именах переменных:

  • Глобальные переменные начинаются с $ - например, $stdin для стандартного ввода.
  • Переменные экземпляра начинаются с @ - например, @name для объекта
  • Переменные класса начинаются с @@ - например, @@total для класса
3 голосов
/ 25 августа 2010

Я полагаю, что это более лаконичный способ сделать вышеизложенное (не проверено):

def to_s 
  output = ""
  @selections.each_with_index do | selection,line |  
    output << line==0 ? selection.to_s(true) and next : selection.to_s
    output << line % 5 ? " $ " : "\r"
  end 
  return output 
end

Если вы не являетесь поклонником троичного оператора (x? Y: z), тогда вы можете сделать их, если:

def to_s 
  output = ""
  @selections.each_with_index do | selection,line |  
    if line==0
      output << selection.to_s(true)
    else
      output << selection.to_s
      if line % 5
        output << " $ "
      else
        output << "\r"
      end
    end
  end
  return output 
end  
0 голосов
/ 26 августа 2010

Имена переменных допускают использование букв не-ASCII, и существует не-ASCII-версий знака вопроса, поэтому вы можете ставить вопросительные знаки (а также некоторые формы пробелов) в именах переменных.

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