7

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"
}

然后是一个可爱的错误信息:

<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"
                                                     ^

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

4

1 回答 1

17

问题是您不能在单引号字符串中保留未转义的引号,就像在单词文件和文件夹周围加上引号时所做的那样。尝试使用三引号字符串,它允许在其中包含未转义的引号(它仅由第二个三引号终止):

s"""select ${if (isF) "file" else "folder"} "${abs.getName}" of folder"""
于 2013-10-22T12:17:38.653 回答