我在HAML中有一个循环如下:
- first = true
- @years.each do |year|
%th #{year}
- first = false and next if first == true
%th #{year} Δ
%th #{year} Δ %
目标是在第一年后添加delta
列多年。
调试行我可以看到first
正确设置为false
,但next
后面的列仍在输出。
如果我在没有布尔值的情况下进行比较,事情会按预期进行:
- first = :true
- @years.each do |year|
%th #{year}
- first = :false and next if first == :true
%th #{year} Δ
%th #{year} Δ %
有谁知道幕后发生了什么?
使用Ruby 2.2.3
和HAML 4.0.7
答案 0 :(得分:3)
在您的情况下,(first = false)
解析为false,因此and
表达式返回false而不运行next
。
这是表达式的重要功能:
do.something if !myobject.nil? and myobject.some_method
没有短路,myobject.some_method会在每次myobject为零时抛出错误。
您可以通过这种方式编写haml来避免此问题:
- first = true
- @years.each do |year|
%th #{year}
- if first == true
- first = false
- next
%th #{year} Δ
%th #{year} Δ %