Rails는 기본적으로 stdlib의 ERB 를 사용 하지 않고 erubis를 사용 합니다 . 출처 : 이 어플의 개발자의 코멘트 , ActionView의 gemspec , 이 글을 쓰는 동안 내가 한 허용 병합 요청 .
가 있는 방법 하이픈 사업자에 특히 그들 사이의 행동 차이, %-
그리고 -%
작품.
문서가 부족하다. Ruby의 ERB 형식은 "공식적으로"정의 된 곳은 어디인가? 다음은 경험적 결론입니다.
모든 테스트는 다음을 가정합니다.
require 'erb'
require 'erubis'
사용할 수있을 때 -
- ERB : 통과해야합니다
-
에 trim_mode
의 옵션 ERB.new
을 사용하는.
- erubis : 기본적으로 활성화되어 있습니다.
예 :
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
무엇을 하는가 -%
:
예 :
# 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 : ( with with) <%- %>
와 동일 하기 때문에 쓸모 가 없으며 , 유용한 유일한 경우 와 함께 사용할 수 없습니다 . 따라서 이것을 사용하지 마십시오.<% %>
=
=
-%
예 :
# 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
무엇 %-
과 -%
함께
두 가지 효과의 정확한 조합.