相关疑难解决方法(0)

Scala中两种卷曲方式; 每个用例是什么用的?

我正在讨论Scala样式指南中的多个参数列表.我已经认识到,有两种方式讨好,我想知道用例是什么:

def add(a:Int)(b:Int) = {a + b}
// Works
add(5)(6)
// Doesn't compile
val f = add(5)
// Works
val f = add(5)_
f(10) // yields 15

def add2(a:Int) = { b:Int => a + b }
// Works
add2(5)(6)
// Also works
val f = add2(5)
f(10) // Yields 15
// Doesn't compile
val f = add2(5)_
Run Code Online (Sandbox Code Playgroud)

风格指南错误地暗示这些是相同的,当它们显然不是时.该指南试图说明创建的curried函数,并且,虽然第二种形式不是"by-the-book"currying,但它仍然非常类似于第一种形式(尽管可以说更容易使用,因为你不需要的_)

从那些使用这些形式的人那里,对于何时使用一种形式而不是另一种形式的共识是什么?

coding-style scala currying

81
推荐指数
3
解决办法
1万
查看次数

scala通过嵌套函数或多个参数列表进行currying

在Scala中,我可以使用两个参数列表定义一个函数.

def myAdd(x :Int)(y :Int) = x + y
Run Code Online (Sandbox Code Playgroud)

这样可以轻松定义部分应用的功能.

val plusFive = myAdd(5) _
Run Code Online (Sandbox Code Playgroud)

但是,我可以通过定义和返回嵌套函数来完成类似的事情.

  def myOtherAdd(x :Int) = {
    def f(y :Int) = x + y
    f _
  }
Run Code Online (Sandbox Code Playgroud)

在化妆方面,我已经移动了下划线,但这仍然感觉像是在晃动.

val otherPlusFive = myOtherAdd(5)
Run Code Online (Sandbox Code Playgroud)

我应该使用什么标准来偏好一种方法呢?

scala

6
推荐指数
2
解决办法
1801
查看次数

与非隐式参数结合使用时,为什么隐式参数不起作用

一个非常简单的用例,假设我有一个Foo接受 2 个参数的类,1 个是普通参数,1 个是隐式参数。

class Foo(val msg: String, implicit val n: Int) {
  def multiplier = msg * n
}

implicit val num: Int = 4
val foo = new Foo("yo")
println(foo.msg)
Run Code Online (Sandbox Code Playgroud)

我知道如果我将隐式参数移动到另一个列表(即 curried ),它会起作用class Foo(val msg: String)(implicit val n: Int)。但是,出于某种原因,我不想这样做。

有人可以解释为什么当前版本的实现不起作用吗?

scala implicit

3
推荐指数
1
解决办法
92
查看次数

在scala中curry有用的场景是什么?

我找到了一些关于什么是咖喱以及它能做些什么的好帖子.它可以将带有参数列表的函数转换为函数列表.我不清楚它在什么情况下是有用的.谁能给我一个具体的例子?

Scala currying与部分应用的函数

scala currying

0
推荐指数
1
解决办法
120
查看次数

标签 统计

scala ×4

currying ×2

coding-style ×1

implicit ×1