String 什么';Groovy多行字符串有什么问题?
Groovy脚本引发错误:String 什么';Groovy多行字符串有什么问题?,string,groovy,multiline,String,Groovy,Multiline,Groovy脚本引发错误: def a = "test" + "test" + "test" 错误: No signature of method: java.lang.String.positive() is applicable for argument types: () values: [] 虽然此脚本工作正常: def a = new String( "test" + "test" + "test" ) 为什么?因为groovy没有EOL标记(例如;),如果
def a = "test"
+ "test"
+ "test"
错误:
No signature of method: java.lang.String.positive() is
applicable for argument types: () values: []
虽然此脚本工作正常:
def a = new String(
"test"
+ "test"
+ "test"
)
为什么?因为groovy没有EOL标记(例如
;
),如果您将操作符放在下面的行上,它会变得混乱
相反,这会起作用:
def a = "test" +
"test" +
"test"
正如Groovy解析器所知道的,在下面的代码行中会出现一些东西
Groovy将原始的def
看作三条独立的语句。第一个将test
分配给a
,第二个将尝试使“test”
为正(这就是失败的地方)
使用newstring
constructor方法,Groovy解析器仍然在构造函数中(因为大括号还没有关闭),因此它可以在逻辑上将三行连接到一条语句中
对于真正的多行字符串,还可以使用三重引号:
def a = """test
test
test"""
将在三行上创建一个带有test的字符串
此外,您还可以通过以下方式使其更整洁:
def a = """test
|test
|test""".stripMargin()
将从每一行修剪左边(最多包括
|字符)您可以告诉Groovy,该语句应该通过添加一对括号(…)
第二个选项是在每行末尾使用反斜杠,\
:
def a = "test" \
+ "test" \
+ "test"
FWIW,这与Python多行语句的工作方式相同。类似于stripMargin()
,也可以使用like
因为
前导空格数最少的行决定要删除的行数
您还需要缩进第一个“test”,而不是将它直接放在inital“
”(\
确保多行字符串不会以换行符开头)。如果它对其他人有帮助,您可以使用类似def a=b++”的代码得到相同的错误/“+c
。在这种情况下,两个+符号显然是问题所在。或者简单地使用而不是stripMargin()
。是的,并省略额外行上的
字符。您可以在内使用双引号。“
stringsRight,我已经编辑了答案,以显示您需要如何稍微重新格式化代码以生成stripIndent()
work。因为a)我已经把它作为评论发布了,b)它与这个答案没有太大区别。第二个问题也是VBA多行语句的工作原理:D(因为VBA,只能使用下划线而不是反斜杠。)第二个选项在Jenkins文件中失败。第一个选项有效。吹毛求疵:Python多行字符串在使用parens时不需要连接运算符,所以它不完全相同。为什么\呢?我改进了我的最后一句话,以便更好地解释它。
def a = "test" \
+ "test" \
+ "test"
def a = """\
test
test
test""".stripIndent()