Here-Docs 包含 if then else 语句

发布于 2024-10-03 01:23:11 字数 58 浏览 1 评论 0原文

正如标题所说。是否可以在 ruby​​ 的此处文档中使用 if/then 语句?

谢谢

Like the title says. Is it possible to use an if/then statement in a here-doc for ruby.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

樱娆 2024-10-10 01:23:11

是的


irb(main):001:0> x = <<-E
irb(main):002:0" How
irb(main):003:0" now
irb(main):004:0" #{
irb(main):005:0"   if true
irb(main):006:0"     "brown"
irb(main):007:0"   else
irb(main):008:0"     "red"
irb(main):009:0"   end
irb(main):010:0" } cow
irb(main):011:0" E
=> "How\nnow\nbrown cow\n"
irb(main):012:0> puts x
How
now
brown cow

Yes


irb(main):001:0> x = <<-E
irb(main):002:0" How
irb(main):003:0" now
irb(main):004:0" #{
irb(main):005:0"   if true
irb(main):006:0"     "brown"
irb(main):007:0"   else
irb(main):008:0"     "red"
irb(main):009:0"   end
irb(main):010:0" } cow
irb(main):011:0" E
=> "How\nnow\nbrown cow\n"
irb(main):012:0> puts x
How
now
brown cow
早茶月光 2024-10-10 01:23:11

比较(和对比)这些样本。哪个更具可读性,逻辑更清晰,你想支持吗?:

示例#1:

string = <<END_STRING
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
#{
if (true_or_false)
  'jackdaws love my giant sphinx of quartz'
else
  'Sphinx of black quartz, judge my vow.'
end
}
proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem
ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt
in culpa qui officia deserunt mollit anim id est laborum.
END_STRING

示例#2:

string = <<END_STRING
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
#{
(true_or_false) \
  ?  'jackdaws love my giant sphinx of quartz' \
  : 'Sphinx of black quartz, judge my vow.'
}
proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem
ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt
in culpa qui officia deserunt mollit anim id est laborum.
END_STRING

示例#3:

string = <<END_STRING
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
#{(true_or_false) ? 'jackdaws love my giant sphinx of quartz' : 'Sphinx of black quartz, judge my vow.'}
proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem
ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt
in culpa qui officia deserunt mollit anim id est laborum.
END_STRING

示例#4:

insert_string = (true_or_false) \
  ? 'jackdaws love my giant sphinx of quartz' \
  : 'Sphinx of black quartz, judge my vow.'

string = <<END_STRING
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
${ insert_string }
proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem
ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt
in culpa qui officia deserunt mollit anim id est laborum.
END_STRING

我个人更喜欢#4,因为它将逻辑与字符串的定义分开,有助于更轻松地了解正在发生的情况,但您的情况可能会有所不同。

Compare (and contrast) these samples. Which is more readable, has clearer logic, and would you want to support?:

Example #1:

string = <<END_STRING
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
#{
if (true_or_false)
  'jackdaws love my giant sphinx of quartz'
else
  'Sphinx of black quartz, judge my vow.'
end
}
proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem
ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt
in culpa qui officia deserunt mollit anim id est laborum.
END_STRING

Example #2:

string = <<END_STRING
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
#{
(true_or_false) \
  ?  'jackdaws love my giant sphinx of quartz' \
  : 'Sphinx of black quartz, judge my vow.'
}
proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem
ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt
in culpa qui officia deserunt mollit anim id est laborum.
END_STRING

Example #3:

string = <<END_STRING
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
#{(true_or_false) ? 'jackdaws love my giant sphinx of quartz' : 'Sphinx of black quartz, judge my vow.'}
proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem
ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt
in culpa qui officia deserunt mollit anim id est laborum.
END_STRING

Example #4:

insert_string = (true_or_false) \
  ? 'jackdaws love my giant sphinx of quartz' \
  : 'Sphinx of black quartz, judge my vow.'

string = <<END_STRING
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
${ insert_string }
proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem
ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt
in culpa qui officia deserunt mollit anim id est laborum.
END_STRING

Personally I prefer #4 because it separates the logic from the definition of the string, helping to keep it easier to see what is going on, but your mileage might vary.

并安 2024-10-10 01:23:11

定界符就像一个字符串。因此,如果您的字符串允许变量求值和替换(不使用引号或双引号),您可以执行以下操作:

switcheroo=true
mydoc = <<HDOC
This string will always appear
#{"This will only appear if switcheroo is true" if switcheroo} 
HDOC

您必须将条件放在括号内,这是标准的字符串内求值技术。

另请注意,如果您的定界文档的引用使用单引号,这将不起作用,这意味着它是一个文字字符串。

A heredoc is just like a string. So if your string allows variable evaluation and substitution (using no quotes or double quotes), you can do something like this:

switcheroo=true
mydoc = <<HDOC
This string will always appear
#{"This will only appear if switcheroo is true" if switcheroo} 
HDOC

You have to put your conditions inside the brackets, standard in-string evaluation technique.

Please also note that this won't work if the quoting for your heredoc uses single quotes, meaning it's a literal string.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文