用ruby正确键入多行字符串和冰糕

  • 本文关键字:字符串 ruby ruby sorbet
  • 更新时间 :
  • 英文 :


我在一个项目中采用Sorbet,我不明白我应该如何输入以下常量:

RETRIEVE_FILE_URL_QUERY = <<~QUERY.freeze
query($input: ID!) {
node(id: $input) {
... on BulkOperation {
url
partialDataUrl
}
}
}
QUERY

最快的方法应该是

RETRIEVE_FILE_URL_QUERY = T.let(<<~QUERY.freeze
query($input: ID!) {
node(id: $input) {
... on BulkOperation {
url
partialDataUrl
}
}
}
QUERY, String)

这也是我从vscode

得到的快速修复

但是这会引发错误

escape sequence meets end of file (2001)

如预期的那样,因为无法找到heredoc名称。

所以我试了

RETRIEVE_FILE_URL_QUERY = T.let(<<~QUERY.freeze
query($input: ID!) {
node(id: $input) {
... on BulkOperation {
url
partialDataUrl
}
}
}
QUERY
, String)

但是这引发了另一个错误:

T.untyped
unexpected token "," (2001)

看到这里,我不知道该怎么处理。

我知道我可以使用连接操作符(+),但我不想分割这个字符串。

我还不熟悉ruby,所以我想问你是否有办法处理这个问题。

你的"最快";Way违反了语法。终止令牌必须单独在一行上。

当你这样做的时候:

QUERY, String)

您输入的不是终止符令牌QUERY,所以假定字符串继续运行。

请记住,Ruby有多个引号系统,并且在很大程度上与多行无关,例如:

RETRIEVE_FILE_URL_QUERY = "
query($input: ID!) {
node(id: $input) {
... on BulkOperation {
url
partialDataUrl
}
}
}
".freeze

你也可以使用# frozen_string_literal: true为你自动冻结。

最新更新