我对关键字end感到非常困惑。例如,在下面的代码中,我试图定义一个我自己的帮助器方法但是我得到了太多的SyntaxErrors,因为我错过了一些目的。我添加了一些它的作品,但是...我不明白为什么我必须把它们放在一起,阻止它们关闭。
我用多个问号标记了它们。
谢谢你们!
module ApplicationHelper
def notice_color(notice)
if notice
type = type_notice(notice)
div_tag_head = "<div class=\"alert alert-#{type} alert-dismissable\">"
cross_button = "<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">×</button>"
notice_tag = div_tag_head + cross_button + notice + "</div>"
notice_tag.to_s.html_safe
end # If's end.
end # Def's end.
def type_notice(notice)
downcased = notice.downcase
if downcased.include? 'error' or downcased.include? 'invalid'
return'danger'
else if downcased.include? 'done' or downcased.include? 'success'
return 'success'
else if downcased.include? 'hey'
return 'warning'
else
return 'info'
end # If's end.
end #Def's end
end # ?????? <------ First
private :type_notice
end # ??????? <------ Second
end # Module's end
答案 0 :(得分:7)
您的问题出在if
区块中。 Ruby语法为elsif
而非else if
:
if downcased.include? 'error' or downcased.include? 'invalid'
return'danger'
elsif downcased.include? 'done' or downcased.include? 'success'
return 'success'
elsif downcased.include? 'hey'
return 'warning'
else
return 'info'
end
您的两个else if
行实际上是开始两个新的if
语句,因此您需要额外的end
几个。
答案 1 :(得分:0)
正如格雷姆所说,请谨慎使用elsif
代替else if
。
但是,缩进也可能在混乱中发挥作用。如果您正在使用Sublime Text,请检查Preferences.sublime-settings文件,并确保其中有一行显示"tab_size": 2
或"tab_size": n
(n是您的任何号码)很舒服,虽然2是事实上的行业标准)。如果代码位于哈希中间,请小心在代码后面添加逗号。
要访问首选项文件,请在Sublime Text中按Shift + Command + p(在Apple上),然后输入&#39; user,&#39;或找到“首选项”菜单选项,然后选择“设置 - 用户”。