Groovy:返回斜杠转义的字符串会导致异常

时间:2019-05-06 18:01:46

标签: string groovy

我有一个简单的脚本,它可以运行并起作用:

var txtval = document.getElementById('permute_this').value + '<br>';    
document.getElementById('results').innerHTML += 
   (permute([txtval]));

但是,如果将其更改为此,运行它时会看到错误:

\n

错误:

println testReturn()

String testReturn() {
    def str = /asdf/
    return str
}

有人知道为什么我必须在返回前定义一个斜杠转义的字符串吗?

1 个答案:

答案 0 :(得分:0)

在我看来,return语句与groovy 2.x中的其他函数调用一样,并且斜线字符串在无括号的函数调用中效果不佳。

一个例子:

println /asdf/   // fails
println(/asdf/)  // works

println testReturn()

String testReturn() {
  /asdf/         //works - implicit return
}

String btestReturn() {
  return /asdf/  // fails
}

String testReturn() {
  return(/asdf/) //works
}

在我的书中,这是意外行为,并且是常规解析器的限制。

在groovy 3(或更具体地,在本例中为groovy 3.0.0-alpha-3)中,解析器已被重写,并包含以下代码:

println /asdf/   // fails
println(/asdf/)  // works

println testReturn1()
println testReturn2()
println testReturn3()

String testReturn1() {
  /asdf/         // works
}

String testReturn2() {
  return /asdf/  // works
}

String testReturn3() {
  return(/asdf/) // works
}

给出了一些更有用的错误:

Caught: groovy.lang.MissingPropertyException: No such property: println for class: solution
groovy.lang.MissingPropertyException: No such property: println for class: solution
  at solution.run(solution.groovy:1)

告诉我们,没有括号,groovy无法确定println是属性还是方法调用。删除第一行使上面的代码在groovy 3.x下工作。