我正在學習如何使用erb(以及 ruby??),并且很難從該站點復制示例,作者演示了您可以通過關閉一個塊來洗掉尾端,-%>但是當我這樣做時,我得到一個語法錯誤
syntax error, unexpected ';' (Syntax Error); @values.each do |val| -; _erbout.<< "\\n".freeze
這是我的代碼無法運行的示例
<% @values = ['one','two']; puts "Was assigned."%>
<% @values.each do |val| -%>
Some stuff with <%= val %>
<% end -%>
但以下運行
<% @values = ['one','two']; puts "Was assigned."%>
<% @values.each do |val| %>
Some stuff with <%= val %>
<% end %>
最終解決方案
只是為了添加到接受的答案,我從命令列運行 erb
erb test.cfg.erb
閱讀您可以通過設定選項來man erb啟用換行符修剪-T-
erb -T - test.cfg.erb
是我正在尋找的命令。
uj5u.com熱心網友回復:
如果您查看ERB 類檔案,您會看到 中有一個可選的trim_mode關鍵字引數ERB.new,它的可能值之一是:
- omit blank lines ending in -%>
默認情況下,-%>元素只是被認為是無效的。
現在如果你編譯你的第一個模板給它正確的trim_mode選項:
str = %q(
<% @values = ['one','two']; puts "Was assigned."%>
<% @values.each do |val| -%>
Some stuff with <%= val %>
<% end -%>
)
erb = ERB.new(str, trim_mode: '-') # Without trim_mode you'll get the error
puts erb.result(binding)
你會得到正確的結果:
Was assigned.
Some stuff with one
Some stuff with two
您鏈接到的指南來自Puppet,大概他們ERB在內??部使用模板并始終將trim_mode: '-'選項傳遞給它。但是如果你ERB直接使用,你必須記得自己包含它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/497646.html
