gpt4 book ai didi

scala - Scala 中右箭头的含义

转载 作者:行者123 更新时间:2023-12-03 11:45:19 24 4
gpt4 key购买 nike

在 Programming In Scala 的第 9 章中,有一个这样的示例方法:

def twice(op: Double => Double, x: Double) = op(op(x))
作者在书中说:

The type of op in this example isDouble => Double, which means it is afunction that takes one Double as anargument and returns another Double.


我不明白这里的“Double => Double”是什么,在前面的章节中,“=>”出现的地方只表示函数字面量,从来没有写过这样的“Type => Type”,因为根据Scala函数字面量语法定义, 函数字面量的右边部分是函数体,函数体怎么可能是“Double”呢?

最佳答案

因为它有两种用法。

首先,您可以使用 => 来定义函数字面量。

scala> val fun = (x: Double) => x * 2
fun: (Double) => Double = <function1>

scala> fun (2.5)
res0: Double = 5.0

这很容易。但这里的问题是,什么类型 fun是?它是一个“将 Double 作为参数并返回 double 的函数”,对吗?

那么我怎么能用它的类型来注释乐趣呢?即 (Double) => (Double) .好吧,前面的例子可以改写为:
scala> val fun: Double => Double = (x: Double) => x * 2
fun: (Double) => Double = <function1>

scala> fun (2.5)
res1: Double = 5.0

好的,那么下面的代码是做什么的呢?
def twice(op: Double => Double, x: Double) = op(op(x))

好吧,它告诉你 op 是一个 (Double => Double) ,这意味着它需要一个接受 Double 并返回 Double 的函数。

所以你可以通过之前的 fun函数到它的第一个参数。
scala> def twice(op: Double => Double, x: Double) = op(op(x))    
twice: (op: (Double) => Double,x: Double)Double

scala> twice (fun, 10)
res2: Double = 40.0

相当于替换 opfun ,并替换 x10 ,即 fun(fun(10))结果将是 40。

关于scala - Scala 中右箭头的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3878347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com