簡體   English   中英

如何使用 HEREDOC 作為參數傳遞給方法?

[英]How to use HEREDOC to pass as an argument to a method?

代碼示例:

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."
)

此行中存在錯誤:

second: <<~TEXT

RuboCop 是這樣描述的:

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

你能告訴我應該是什么語法嗎? 我需要保持<<~的外觀和使用。

另一種選擇是在方法調用之后移動heredoc。 但是,由於heredoc 從其標識符之后的行開始,因此您的方法調用不能跨越多行:

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

對於更長的值,您可以使用多個 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

使用 heredocs,解析器期望確切的分隔符來關閉文字。 您使用TEXT打開,但您使用TEXT,並且 ruby 不認為此文字已關閉。 但是,您可以(並且在這種情況下應該)將逗號放在開始分隔符之后。 這是一個修復:

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."
)

你甚至可以通過這種方式調用方法。 例如,波浪形的 heredoc ( <<~TEXT ) 以前在 rails 中作為<<-TEXT.strip_heredoc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM