Ответ 1
Это будет один из способов:
code = []
code << "next line of code #{something}"
code << "another line #{some_included_expression}"
code.join("\n")
Здесь что-то я часто делаю при программировании:
code = ''
code << "next line of code #{something}" << "\n"
code << "another line #{some_included_expression}" << "\n"
Есть ли лучший способ, чем << "\n"
или + "\n"
в каждой строке? Это кажется довольно неэффективным.
В частности, меня интересуют решения Ruby. Я думаю что-то вроде
code = string.multiline do
"next line of code #{something}"
"another line #{some_included_expression}"
end
Это будет один из способов:
code = []
code << "next line of code #{something}"
code << "another line #{some_included_expression}"
code.join("\n")
Если вы хотите создать блок текста, простой способ сделать это - просто использовать оператор%. Например:
code = %{First line
second line
Third line #{2 + 2}}
'code' будет
"First line\n second line\n Third line 4"
Используйте < -оператор:
code = <<-CODE
var1 = "foo"
var2 = "bar"
CODE
Похоже на то, что вы просто вставляете... \n "в свои строки. Это интересный способ сделать это:
class String
def / s
self << s << "\n"
end
end
затем
f = "" # => ""
f / 'line one' # => "line one\n"
f / 'line two' # => "line one\nline two\n"
f / 'line three' # => "line one\nline two\nline three\n"
Это позволит включить что-то вроде:
"" / "line 1" / "line 2" / "line 3" # => "line 1\nline 2\nline 3\n"
Или даже:
f/
"line one"/
"line two"/
"line three" # => "line one\nline two\nline three\n"
Здесь представлен метод здесь:
str = <<end.margin
|This here-document has a "left margin"
|at the vertical bar on each line.
|
| We can do inset quotations,
| hanging indentions, and so on.
end
Это достигается с помощью этого:
class String
def margin
arr = self.split("\n") # Split into lines
arr.map! {|x| x.sub!(/\s*\|/,"")} # Remove leading characters
str = arr.join("\n") # Rejoin into a single line
self.replace(str) # Replace contents of string
end
end
Я предполагаю, что вопрос заключается в следующем: неужели переносимость/наличие патчей обезьян затрудняет это решение.
Вы можете разместить многострочный текст в файле и использовать ERB для его анализа (обратите внимание, что ERB включен в Ruby)
require 'erb'
multi_line_string = File.open("multi_line_string.erb", 'r').read
template = ERB.new(multi_line_string)
template.result(binding)
(ERB может обращаться к переменным из Binding, объекта, который предоставляет доступ к методам экземпляра и переменным, принадлежащим другому объекту. Установив его в "привязку", он указывает на себя)
Документация здесь.
Что случилось с:
code = "next line of code #{something}\n"+
"another line #{some_included_expression}"