我将以下内容作为课程的一部分
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
^
什么给予,也提前感谢,这让我疯狂。
答案 0 :(得分:4)
我想,你不能用'?'命名变量最后。
答案 1 :(得分:3)
我相信这是一种更简洁的方式来做上述(未经测试):
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)的粉丝,那么你可以制作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
答案 2 :(得分:3)
变量名称(下面列出一些例外情况)只能包含字母,数字和下划线。 (另外,它们必须以字母或下划线开头;它们不能以数字开头。)您不能在变量名中使用?
或!
。
除了这个规则之外,Ruby中有一个强约定,在某些内容的末尾有一个问号表示一个返回布尔值的方法:
4.nil? # => returns false....
所以,即使你可以使用它,像first_line?
这样的变量也会混淆(然后惹恼)Rubyists的地狱。他们希望这是一种方法,可以测试某些东西是否是第一行的东西(无论在上下文中是什么意思)。
有关变量名称的例外情况:
$
开头 - 例如,$stdin
用于标准输入。@
开头 - 例如对象的@name
@@
开头 - 例如一个班级@@total
答案 3 :(得分:0)
变量名称允许使用非ASCII字母,并且问号有non-ASCII versions,因此您可以将问号(以及某些形式的空格字符)放入变量名称中。