Scala函数调用省略点号和括号
Scala函数调用省略点号和括号
秋风醉了 发表于2年前
Scala函数调用省略点号和括号
  • 发表于 2年前
  • 阅读 201
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

摘要: Scala函数调用省略点号和括号

Scala函数调用省略点号和括号


省略括号

如果一个方法不用接受参数,你可以无需括号就定义它。调用者也必须不加括号地调用它。如果你加上了空括号,那么调用者可以有选择地加或者不加括号。例如,List 的size 方法没有括号,所以你必须写List(1,2,3).size。如果你尝试写List(1,2,3).size() 就会得到一个错误。如下代码,

println(List(1, 2, 3).size)
println(List(1, 2, 3).size())

运行并输出,

C:\WorkSpace6-scala\scala-train\src\com\usoft\traversing_mapping_so_on.scala:154: error: Int does not take parameters

println(List(1, 2, 3).size())

                          ^

one error found

然而,String 类的length方法在定义时带有括号,所以,"hello".length() 和"hello".length 都可以通过编译。

Scala 社区的约定是,在没有副作用的前提下,省略调用方法时候的空括号。所以,查询一个序列的大小(size)的时候可以不用括号,但是定义一个方法来转换序列的元素则应该写上括号。


省略点号

如下示例,size 方法是List中得到 List 大小的函数,调用时 可以省略点号

scala> List(1,2,3) size
warning: there was one feature warning; re-run with -feature for details
res4: Int = 3

在scala的脚本文件中这样写,

println("hello world" substring(0, 3))

运行并输出,

C:\WorkSpace6-scala\scala-train\src\com\usoft>scala traversing_mapping_so_on.scala

hel

甚至这样写都可以,

println("hello world" substring(0, 3) toUpperCase() indexOf "h")


函数调用使用 {} 代替 ()

当函数 只接收一个参数时,就可以使用花括号 代替 圆括号。如下,

// 定义一个柯里化的函数
def sum(i: Int)(j: (Int) => Int) = j(i)
val res99 = sum(1) { i => i + 10 }
println(res99) // 11


def p(x: Int): Unit = {
  println(x)
}

p {
  2
}

运行并输出,

C:\WorkSpace6-scala\scala-train\src\com\usoft>scala traversing_mapping_so_on.scala

11

2

===========END===========

共有 人打赏支持
粉丝 214
博文 604
码字总数 437214
×
秋风醉了
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: