比方说:

def f(i: Int) : String = i.toString
def d = (x: int) => f(x)

不带任何参数的d如何使用?

===============>>#1 票数:2 已采纳

在这里, d返回一个接受Int并返回String的函数,因此d的签名为

def d: Int => String

实际上,将d实际上实现为def还是val并不重要,因为它不接受参数并且确定性地返回x => f(x)

因此,每次调用d ,都会返回函数x => f(x) ,您可以像调用带有Int任何其他函数一样调用该函数,因此:

println(d)     // prints <function1>
println(d(10)) // prints 10
println(d(5))  // prints 5

例如,如果要将函数作为参数传递给其他函数,则将函数作为值很有用。 Scala标准库中有很多以函数为参数的函数,例如

def isEvenNumber: Int => Boolean = i => i % 2 == 0
println(List(1, 2, 4).filter(isEvenNumber))  // prints List(2, 4)

请注意,在您的特定情况下, d实际上只是部分应用函数f _的别名。

===============>>#2 票数:1

但是,它确实带有参数:

scala> def f(i: Int) : String = i.toString
f: (i: Int)String

scala> def d = (x: Int) => f(x)
d: Int => String

因此, d实际上是一个接受Int并返回String ....的函数,在这种情况下,它是没有意义的,因为它与原始函数做的是相同的事情。 这种类型的操作通常作为包装函数并使用该包装函数进行其他转换的一种方式更为有用。

  ask by RoyalCanadianKiltedYaksman translate from so

未解决问题?本站智能推荐:

2回复

Scala中的def f = x:Int-> List(x-1,x,x + 1)有什么问题?

嗨,我不太明白为什么Scala中的此定义不起作用。
2回复

Scala中def f(x:Int)= x + 1和val f =(x:Int)=> x + 1之间的实际差异

我是Scala的新手,我遇到了解问题。 为什么有两个相同概念的语法,并且没有一个更有效或更短(仅从打字的角度来看,也许它们的行为不同 - 这就是我所要求的)。 在Go中,类比具有实际差异 - 您无法正向引用分配给变量的lambda,但您可以从任何地方引用命名函数。 如果我理解正确的话,
3回复

“()”在以下含义:val f = {()=> x + = 1}

我的问题是关于Scala函数: 很明显,函数文字是否像这样: 但是()代表什么: 我在Scala中很陌生。 我已经读完了一本Scala书中的功能一章,但仍然无法理解()在这里的含义。
2回复

'x:()=> Int'和'x:=> Int'有什么区别

在功能参数描述中使用它们时,它们具有不同的效果。 只有后一种形式可以接受多行操作,例如 但是,前者不能。 我知道'()'的意思是“没有参数”,对吧? 但是''在'=> Int'中意味着什么? 这是整个故事。 定义功能 调用它 我们将得到
1回复

寻找Scala中的语法错误:x:Int => x + 2

我不理解为什么以下scala函数的定义不起作用。 任何想法?
1回复

理解`f:Int => _`

鉴于: Function1[Int, _]是什么意思? 是_一种存在? 我怎么称呼它?
1回复

使用Int => F [Boolean]过滤F [List [Int]],其中F是通用的

我正在尝试定义一个抽象代数,使我可以推迟选择要用于包装有效操作(IO,Task,Future等)的Monad,直到我运行该程序。 想象一下,我需要在isValid做一些可能会产生副作用的事情,例如检查数据库。 最好的是,如果我可以将isValid和getElements保留为抽象-
2回复

val x:Int => Int = {y => y}此scala代码是什么意思?

val x: Int=> Int = { y => y } //①这是正确的 ( x1: Int) => Int = { y => y} //②这是错误的 我了解像这样的简单scala函数: x:Int => x 或这样: val f =(x: I
1回复

在没有x => x的情况下在Option上使用fold

鉴于: 我更喜欢: 对此: 出于类型安全的原因。 例如,这不能编译: 有没有一种简单的方法来获得类型安全性但没有{person => person} ? 编辑:两件事现在具体理解: getOrElse没有非类型安全的。 例如,它不能编译: