ERBファイルで使用されている次の文字の使用方法を説明できますか?
<% %>
<%= %>
<% -%>
<%# %>
それぞれの使用法は何ですか?
-%>
、およびstackoverflow.com/questions/3952403/...ため<%=
、stackoverflow.com/questions/3901619/...ため<%#
。
<%= %>
と<%= -%>
は異なります。後者のみが末尾の空白を削除します。
ERBファイルで使用されている次の文字の使用方法を説明できますか?
<% %>
<%= %>
<% -%>
<%# %>
それぞれの使用法は何ですか?
-%>
、およびstackoverflow.com/questions/3952403/...ため<%=
、stackoverflow.com/questions/3901619/...ため<%#
。
<%= %>
と<%= -%>
は異なります。後者のみが末尾の空白を削除します。
回答:
<% %>
括弧内のルビコードを実行します。
<%= %>
erbファイルに何かを出力します。
<% -%>
式の後の改行を避けます。
<%# %>
大括弧内のコードをコメント化します。(HTMLコメントとは対照的に)クライアントには送信されません。
ERBの詳細については、Ruby Docにアクセスしてください。
<%#
直後にあるのは普通のことです...ええ、それを何か特別なものだと考えるのは楽しいですが、それは特別な構文構成ではなく単なるERBイディオムではありませんか?<%
#
<%...%>
、<%#...%>
コメント化しません(つまり、行だけをコメント化します)オンです)。
<% %>
および<%- and -%>
任意のRubyコード用ですが、結果を出力しません(ifステートメントなど)。2つは同じです。
<%= %>
Rubyコードの結果を出力するためのものです
<%# %>
ERBコメントです
ここに良いガイドがあります:http : //api.rubyonrails.org/classes/ActionView/Base.html
<%-
空白が先頭に何もしないことはわかりませんし、どこにも記載されていません。よろしいですか?多分それはERBの別の味です。stdlibのドキュメントには、そのオプションは表示されていません。
RailsはデフォルトでstdlibのERBを使用せず、erubisを使用します。ソース:この開発者のコメント、ActionViewのgemspec、これを書いているときに私が行ったマージ要求を受け入れました。
それらの間には、特にハイフン演算子と機能の動作に違いがあります。%-
-%
ドキュメントが不足しています。RubyのERB形式は「公式に」どこで定義されていますか?したがって、以下は経験的結論です。
すべてのテストで次のことが想定されています。
require 'erb'
require 'erubis'
使えるとき -
-
にtrim_mode
するオプションERB.new
を使用します。例:
begin ERB.new("<%= 'a' -%>\nb").result; rescue SyntaxError ; else raise; end
ERB.new("<%= 'a' -%>\nb" , nil, '-') .result == 'ab' or raise
Erubis::Eruby.new("<%= 'a' -%> \n b").result == 'a b' or raise
何-%
が:
ERB:改行の場合、次の文字を削除します。
エルビス:
で<% %>
(なしで=
)とは同じである-
ため<% %>
、役に立たない<% -%>
。<% %>
空白のみが含まれている場合は現在の行を削除し、それ以外の場合は何も行いません。
中に<%= -%>
(と=
):
例:
# Remove
ERB.new("a \nb <% 0 -%>\n c", nil, '-').result == "a \nb c" or raise
# Don't do anything: not followed by newline, but by space:
ERB.new("a\n<% 0 -%> \nc", nil, '-').result == "a\nb \nc" or raise
# Remove the current line because only whitesapaces:
Erubis::Eruby.new(" <% 0 %> \nb").result == 'b' or raise
# Same as above, thus useless because longer.
Erubis::Eruby.new(" <% 0 -%> \nb").result == 'b' or raise
# Don't do anything because line not empty.
Erubis::Eruby.new("a <% 0 %> \nb").result == "a \nb" or raise
Erubis::Eruby.new(" <% 0 %> a\nb").result == " a\nb" or raise
Erubis::Eruby.new(" <% 0 -%> a\nb").result == " a\nb" or raise
# Don't remove the current line because of `=`:
Erubis::Eruby.new(" <%= 0 %> \nb").result == " 0 \nb" or raise
# Remove the current line even with `=`:
Erubis::Eruby.new(" <%= 0 -%> \nb").result == " 0b" or raise
# Remove forward only because of `-` and non space before:
Erubis::Eruby.new("a <%= 0 -%> \nb").result == "a 0b" or raise
# Don't do anything because non-whitespace forward:
Erubis::Eruby.new(" <%= 0 -%> a\nb").result == " 0 a\nb" or raise
何%-
が:
ERB:タグの前と前の改行の後の空白を削除しますが、前に空白しかない場合のみです。
erubis:<%- %>
は<% %>
(なし=
)と同じであるため役に立たず、これを使用する=
ことはできません-%
。したがって、これを使用しないでください。
例:
# Remove
ERB.new("a \n <%- 0 %> b\n c", nil, '-').result == "a \n b\n c" or raise
# b is not whitespace: do nothing:
ERB.new("a \nb <%- 0 %> c\n d", nil, '-').result == "a \nb c\n d" or raise
何%-
を-%
して一緒に
両方の効果の個別の正確な組み合わせ。
<%%
あいまいなため、これに対する答えとしてリテラルタグ区切り文字を追加しました。これは、erb <%
に、chart.jsツールチップの表示などのjsアプリに必要なタグの部分を解釈しないように指示します。
更新(リンク切れの修正)
ERBに関するすべてがここにあります:https : //puppet.com/docs/puppet/5.3/lang_template_erb.html#tags
これらは、Ruby on Railsで使用されます 。
<%%>:-
<%%>タグは、条件、ループ、ブロックなど、何も返さないRubyコードを実行するために使用されます。例:-
<h1>Names of all the people</h1>
<% @people.each do |person| %>
Name: <%= person.name %><br>
<% end %>
<%=%>:-
コンテンツの表示に使用します。
Name: <%= person.name %><br>
<%-%>:-
RailsはERBを拡張しているため、Railsテンプレートのタグに末尾のハイフンを追加するだけで改行を抑制できます
<%#%>:-
コードをコメント化する
<%# WRONG %>
Hi, Mr. <% puts "Frodo" %>
<% %>
そこでコードを実行しますが、結果を出力しません。例:
erbファイルで他の場合に使用できます。
<% temp = 1 %>
<% if temp == 1%>
temp is 1
<% else %>
temp is not 1
<%end%>
印刷します temp is 1
<%= %>
コードを実行し、出力も出力します。例:
rails変数の値を出力できます。
<% temp = 1 %>
<%= temp %>
印刷します 1
<% -%>
何も印刷されないので違いはありません。で-%>
のみ意味があり<%= -%>
、これにより新しい行が回避されます。
<%# %>
これで書かれたコードをコメントアウトします。