Scala字符串插值空字符串编译错误

时间:2015-05-05 00:36:04

标签: scala string-interpolation

为什么带有字符串插值前缀的空字符串在后跟语句时无法编译?

例如

val test = s""
println("hello")

无法编译错误

error: value println is not a member of String
possible cause: maybe a semicolon is missing before `value println'?
       println("hello")

但以下所有编译正常:

val test = s""
val test = ""
println("hello")
def test() { s"" }
println("hello")
val test = s" "
println("hello")

1 个答案:

答案 0 :(得分:7)

这是一个解析器错误,已于去年1月修复,因此在最新的2.11.x版本中应该没问题。

以下是错误报告:https://issues.scala-lang.org/browse/SI-7919。 相关评论(Paul Phillips)是:

  

在完全清空后丢失换行令牌   插值字符串。如果它是$audio_flies = array('http://example.com/1.mp3','http://example.com/2.mp3'); $zipname = 'file.zip'; $zip = new ZipArchive; $zip->open($zipname, ZipArchive::CREATE); foreach ($audio_files as $file) { echo "$file"; $zip->addFile($file); } $zip->close(); header('Content-Type: application/zip'); header('Content-disposition: attachment; filename='.$zipname); header('Content-Length: ' . filesize($zipname)); readfile($zipname); ,或是分号而不是   新行,或两个换行符,或空字符串后的注释,它   编译。

s"1"

以下是解决它的公关:https://github.com/scala/scala/pull/3411