字符串插值转义引用PITA

0__*_*0__ 7 scala string-interpolation

它让我发疯,字符串插值有一些特殊的规则,不允许从a + b样式直接转换:

// ok
def test(f: java.io.File) = {
  val abs = f.getAbsoluteFile
  val isF = abs.isFile
  "select " + (if (isF) "file" else "folder") +"\"" + abs.getName +"\" of folder"
}

// fail
def test(f: java.io.File) = {
  val abs = f.getAbsoluteFile
  val isF = abs.isFile
  s"select ${if (isF) "file" else "folder"} \"${abs.getName}\" of folder"
}
Run Code Online (Sandbox Code Playgroud)

然后有一个可爱的错误消息:

<console>:38: error: value $ is not a member of String
         s"select ${if (isF) "file" else "folder"} \"${abs.getName}\" of folder of the front window"
                                                     ^
Run Code Online (Sandbox Code Playgroud)

这里的s-string有什么问题?

Sha*_*nds 17

问题是,您不能将未转义的引号留在单引号字符串中,就像在文件和文件夹中放置引号一样.尝试使用三引号字符串,它允许在其中使用未转义的引号(它仅由第二个三引号终止):

s"""select ${if (isF) "file" else "folder"} "${abs.getName}" of folder"""
Run Code Online (Sandbox Code Playgroud)