doilux’s tech blog

ITに関する備忘録。 DDP : http://doiluxng.hatenablog.com/entry/2018/01/01/195409

Scalaのadd(a: Int, b: Int)とadd(a: Int)(b: Int)の違い

(a: Int, b: Int)の部分、引数リストって言うらしい。

Scalaメソッド定義メモ(Hishidama's Scala def Memo)

部分適用したいときはこうなる

add(a: Int, b: Int)の場合

scala> def add(a: Int, b: Int): Int = a + b
add: (a: Int, b: Int)Int

scala> def addEx(b: Int): Int = add(3, b)
addEx: (b: Int)Int

scala> addEx(7)
res8: Int = 10

add(a: Int)(b: Int)の場合

scala> def add(a: Int)(b: Int): Int = a + b
add: (a: Int)(b: Int)Int

scala> def addEx = add(3)_
addEx: Int => Int

scala> addEx(4)
res7: Int = 7

下の場合だとbの型がかわってもコンパイルエラーにならない。

↑の理由から、implicitパラメータは分けて書くのだと思われる。

trait UserRepository {
    def findBy(id: domain.user.Id)(implicit reqId: common.request.Id): User
}