美元符号在scala中做了什么

时间:2015-10-01 02:01:45

标签: scala

当我阅读火花源代码here时,我看到了$(a_variable)之类的代码。 这是什么意思?

我在这里复制代码:

  final val blockSize: IntParam = new IntParam(this, "blockSize",
    "Block size for stacking input data in matrices. Data is stacked within partitions." +
      " If block size is more than remaining data in a partition then " +
      "it is adjusted to the size of this data. Recommended size is between 10 and 1000",
    ParamValidators.gt(0))

  /** @group getParam */
  final def getBlockSize: Int = $(blockSize)

2 个答案:

答案 0 :(得分:22)

这不是特殊的Scala语法,它是一个方法名称。在Scala $是一个合法的标识符。该方法继承自org.apache.spark.ml.param.Param特征。

请参阅source

答案 1 :(得分:1)

我相信美元符号通常用于字符串插值。这意味着如果我想在字符串内使用val(ue)/ var(iable)(在第一个双引号前用s表示),我可以使用{{ 1}}号。否则,我们将无法在字符串内使用vals / vars,因为它将不知道如何转义字符串字符。

示例:

$

但是,在您的情况下,val favoriteFruit = "strawberry" val strawberryCount = 12 println(s"My favorite fruit is ${favoriteFruit}. I've had ${strawberryCount} pieces today!") // string interpolation 似乎是{/ {1}} var / val的快捷方式(由@Michael Zajac和@kingledion提供...获取值/变量。不存在,获取默认值/变量)。如果您希望参数并不总是具有对应的值(可以为其设置默认值),则使用$可能是更可靠的解决方案。