目前的 ruby ( <= 2.3 preview 1) 中,如果要写一个多行的字符串,是比较麻烦的。
比如
def hello
puts <<-HEREDOC.
I know I know
You will like it.
HEREDOC
end
hello
输出是
I know I know
You will like it.
前面多了空格!
为了去掉空格,代码就会变得很丑:
def hello
puts <<-HEREDOC
I know I know
You will like it.
HEREDOC
end
hello
或者引入 active_support strip_heredoc
总之可以是做到,只是很不方便。
ruby 2.3 将会引入一个新的语法 <<~
(squiggly heredoc),让你用了就回不去
def hello
puts <<~HEREDOC
I know I know
You will like it.
HEREDOC
end
hello
完美输出:
I know I know
You will like it.
yeah~
之前我是这么写的
def hello
puts <<-SQL.squlish!
SELECT *
FROM users
SQL
end
我一直这么写
str =<<-EOF.gsub(/^[ ]{4}/, '')
I know I know
You will like it.
special in this case!
or in this case
content!
EOF
puts str
当然这种只能处理没有 tab 的情况,如果是 tab 和空格的混合情况就比较麻烦了。因为自己平时的编辑器会自动 将 Tab 换成空格所以用这个带处理问题不大
问下<< 和 <<- 的区别是什么? 还有下面这个代码的语义能否讲解一下
def print_block(*args)
puts <<-TEXT % args
-------------------- block %s
target: %s
data: '%s' + %s (nonce)
found: %s
time:
took: %f
verify: %f
TEXT
end