开发者

Syntax error, unexpected '='

开发者 https://www.devze.com 2023-01-13 04:32 出处:网络
I have the following as part of a class def to_s i = 0 first开发者_Python百科_line? = true output = \'\'

I have the following as part of a class

def to_s
   i = 0
   first开发者_Python百科_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 

And i am getting the following syntax errors

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
                     ^

What give, also thanks in advance, this is driving me nuts.


I suppose, you can't name variables with '?' at the end.


Variable names (with a few exceptions noted below) can only contain letters, numbers and the underscore. (Also, they must begin with a letter or the underscore; they can't begin with a number.) You can't use ? or ! in a variable name.

Beyond that rule, there is a strong convention in Ruby that a question mark at the end of something indicates a method that returns a boolean value:

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

So even if you could use it, a variable like first_line? would confuse (and then annoy) the hell out of Rubyists. They would expect it be a method testing whether something was the first line of something (whatever exactly that means in context).

Exceptions about variable names:

  • Global variables begin with $ - e.g., $stdin for standard input.
  • Instance variables begin with @ - e.g. @name for an object
  • Class variables begin with @@ - e.g. @@total for a class


I believe this is a more concise way of doing the above (untested):

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

If you are not a fan of the ternary operator (x ? y : z) then you can make them ifs:

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  


Variable names allow non-ASCII letters, and there are non-ASCII versions of the question mark, so you can put question marks (and also some forms of space characters) into variable names.

0

精彩评论

暂无评论...
验证码 换一张
取 消