ruby – “#{}”符号与erb表示法
符号之间有什么区别:
" some text #{some_ruby_code} some text #{some_more_ruby_code} some_other_text " 和 ERB.new(" some text <%=some_ruby_code%> some text <%=some_more_ruby_code%> some_other_text ").result 我只是有一个广泛的印象,即erb符号可能更强大,但不是那么清楚.你能从不同方面比较它们,并告诉哪些应该在什么样的场合使用?什么样的事情可以用一种符号而不是另一种符号来完成? 增加1 到目前为止,大多数答案似乎都声称erb效率低下,并且在使用“#{}”时不应使用.现在,让我们问另一种方式.为什么“#{}”符号不能代替erb?它不会更快更好吗? 增加2 下面的大多数答案似乎都假设单个出现的“#{}”不会跨越多行,因此像一个采用多行的循环的代码块不能嵌入其中.但为什么不呢?如果您这样做,我认为与使用<%>执行此操作没有任何区别,除了在后者中您放置<%>在每一行. 解决方法
尝试将ERB用于一般字符串插值的一个缺点是ERB实际上旨在生成HTML.结果将是许多编码问题,当你忘记原始 – 所有的一切,并混淆为什么你的&符号,大于,小于等符号被破坏.
我认为ERB的计算开销也会增加,但这可能无关紧要. 此外,如果你在Ruby中放入内联的ERB,最终会在Ruby内部的ERB内部使用Ruby(当你在ERB中调用方法时可能会更多级别),这将是一个令人困惑的混乱.想想那些必须维护你的代码的可怜的灵魂,说可怜的灵魂甚至可能是你. 更新:您可以将#{}用于简单的HTML模板(对于类似的东西,请参见Mustache)但是生成重复的部分会很困难而且很难看.重复的部分在HTML模板中很常见,因此对于HTML模板系统来说应该是简单而自然的.使用ERB,您可以: <% a.each do |e| %> <!-- ... --> <% end %> 但是#{}插值会很麻烦.你最终也会做#{html(blahblah)},大多数人都会忘记. 此外,“#”在URL中具有特殊含义,在CSS中具有不同的特殊含义(其中大括号也具有特殊含义);片段URL和CSS块在HTML模板中相当常见,所以你总是担心混淆.当使用#{}在URL中生成CSS选择器或片段但这足以使其变得麻烦时,这种特殊的肮脏可能只是一个问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |