ste*_*392 5 ruby syntax ruby-on-rails
我从我的一个控制器类中得到一个错误,我无法弄清楚为什么.错误是:
SyntaxError in TermsController#show, syntax error, unexpected $end, expecting keyword_end
Run Code Online (Sandbox Code Playgroud)
这是terms_controller.rb:
class TermsController < ApplicationController
def show
@term = Term.find(params[:id])
if @term.id == 1
@title = "Fall"
else if @term.id == 2
@title = "Winter"
else if @term.id == 3
@title = "Spring"
else if @term.id == 4
@title = "Summer"
end
end
end
Run Code Online (Sandbox Code Playgroud)
我的展示页面目前只包括:
<h1> <%= @title %> </h1>
Run Code Online (Sandbox Code Playgroud)
这可能是我失踪的小事 - 谢谢你的帮助!
小智 10
问题是没有足够的end关键字并且在找到它正在寻找的内容之前找到它$end(代表文件末尾的标记) - 另一个end.(end关键字的解析器标记是"keyword_end"或"Kend",具体取决于ruby版本.)
每个表达式都需要匹配关键字. ifend
要解决这个问题,请使用elsif而不是else if.它是同一if构造的一部分,不需要匹配end(只if需要匹配end).
if x == 1
"1"
elsif x == 2
"2"
else
"else"
end
Run Code Online (Sandbox Code Playgroud)
另一个选项是case,如果所有分支都检查相同的条件操作数(x在这种情况下),它可以正常工作:
case x
when 1 then "1"
when 2 then "2"
else "else"
end
Run Code Online (Sandbox Code Playgroud)
如果你不希望使用else if(请记住,每if启动一个新的if条件结构),然后确保关闭每个块一个是if打开.我缩进了代码以更好地展示这一点.
if x == 1
"1"
else
if x == 2
"2"
else
"else"
end
end
Run Code Online (Sandbox Code Playgroud)
快乐的编码.
对于迂腐:还有另一种形式if,即作为语法的一部分expr if cond没有匹配end,上面讨论的规则不适用于它.
此外,if和case是只是表现在Ruby中,所以它可能是更惯用这样写
@term = Term.find(params[:id])
@title = case @term.id
when 1 then "Fall"
when 2 then "Winter"
when 3 then "Spring"
when 4 then "Summer"
else "Invalid Term"
end
Run Code Online (Sandbox Code Playgroud)
该if/elsif/end语法可以以同样的方式被使用,但使用case避免了反复提及@term.id.另一个选择是使用Hash来执行这种简单的映射 - 或者映射可以封装在一个单独的方法中 - 但是其他地方也包括在内;-)
| 归档时间: |
|
| 查看次数: |
8698 次 |
| 最近记录: |