unapply
オブジェクトにメソッドがありますshapeless.::
:
def unapply[H, T <: HList](x: H :: T): Option[(H, T)]
したがって、次のように一致させることができますHList
:
scala> val ::(a, ::(b, HNil)) = "1" :: "x" :: HNil
a: String = 1
b: String = x
または、次の代わりに結果: を使用するunapply
メソッドの代替構文を使用:Tuple2
a :: b
::(a, b)
scala> val a :: b :: HNil = "1" :: "x" :: HNil
a: String = 1
b: String = x
scala> "1" :: "x" :: HNil match {
| case a :: b :: HNil => s"$a :: $b :: HNil"
| }
res0: String = 1 :: x :: HNil
あなたの場合:
authHeaders.hrequire{
case client_id :: client_secret :: HNil => isAuthorized(client_id, client_secret)
}
別
メソッドを使用tupled
して、N 引数の関数を単一TupleN
引数の関数に変換できます。
関数の場合:
val isAuthorized: (String, String) => Boolean = ???
authHeaders.hrequire{ isAuthorized tupled _.tupled }
メソッドの場合:
def isAuthorized(s1: String, s2: String): Boolean = ???
authHeaders.hrequire{ (isAuthorized _) tupled _.tupled }