如何使用 HEREDOC 作为参数传递给方法?

Col*_*bri 2 ruby ruby-3 ruby-3.1

代码示例:

create_data_with(
  first: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
  second: <<~TEXT
    Aenean vel ex bibendum, egestas tortor sit amet, tempus lorem. Ut sit
    amet rhoncus eros. Vestibulum ante ipsum primis in faucibus orci
    luctus et ultrices posuere cubilia curae; Quisque non risus vel lacus
    tristique laoreet. Curabitur quis auctor mauris, nec tempus mauris.
  TEXT,
  third: "Nunc aliquet ipsum at semper sodales."
)
Run Code Online (Sandbox Code Playgroud)

错误出现在这一行:

second: <<~TEXT
Run Code Online (Sandbox Code Playgroud)

RuboCop 是这样描述的:

Lint/Syntax: unterminated string meets end of file
(Using Ruby 3.1 parser; configure using TargetRubyVersion parameter, under AllCops)
      second: <<~TEXT
Run Code Online (Sandbox Code Playgroud)

你能告诉我语法应该是什么吗?我需要保留 的外观和使用<<~

Ste*_*fan 5

另一种选择是在方法调用之后移动定界符。但是,由于这里文档从其标识符后面的行开始,因此您的方法调用不得跨越多行:

create_data_with(first: "foo", second: <<~TEXT, third: "bar")
    Aenean vel ex bibendum, egestas tortor sit amet, tempus lorem. Ut sit
    amet rhoncus eros. Vestibulum ante ipsum primis in faucibus orci
    luctus et ultrices posuere cubilia curae; Quisque non risus vel lacus
    tristique laoreet. Curabitur quis auctor mauris, nec tempus mauris.
  TEXT
Run Code Online (Sandbox Code Playgroud)

对于更长的值,您可以使用多个heredocs:

create_data_with(first: <<~FIRST, second: <<~SECOND, third: <<~THIRD)
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
  FIRST
    Aenean vel ex bibendum, egestas tortor sit amet, tempus lorem. Ut sit
    amet rhoncus eros. Vestibulum ante ipsum primis in faucibus orci
    luctus et ultrices posuere cubilia curae; Quisque non risus vel lacus
    tristique laoreet. Curabitur quis auctor mauris, nec tempus mauris.
  SECOND
    Nunc aliquet ipsum at semper sodales.
  THIRD
Run Code Online (Sandbox Code Playgroud)