gpt4 book ai didi

Scala:将隐式参数传递给返回另一个函数的函数

转载 作者:行者123 更新时间:2023-12-02 15:10:15 25 4
gpt4 key购买 nike

比方说,我有四个类(class)

class I
class A
class B
class C

函数接受两个参数,其中一个是隐式的,并返回另一个函数:

def f(arg: String)(implicit i: I): (C => B) => A = _ => new A

我在范围内的某处隐含了I:

implicit val i = new I

所以,我想这样调用 f:

f("123") { c => new B }

但我不能,因为 lambda 参数 c 上的 missing parameter type error。好的,让我们明确地添加这个参数:

f("123") { c: C => new B }

然后我有类型不匹配:第二个 f 参数需要是 I,但实际上是 C => B!

我现在看到两个选项,如何解决这个问题。首先是简单地显式传递参数:

f("123")(i) { c => new B }

但我们并不总是能够访问隐式值。另外,我们可以将函数调用分为两个表达式:

val g = f("123")
g { c => new B }

这提供了我们所需要的,但代码似乎很麻烦。我想更简单地调用函数。

那么,如何在一行中调用这样的函数呢?

最佳答案

我认为 Implicitly 适合您的用例。

f("123")(隐式[I])((c: C) => new B)

Implicitly 在 Scala 2.8 中可用,在 Predef 中定义为:

def implicitly[T](implicit e: T): T = e

希望这对您有所帮助。

关于Scala:将隐式参数传递给返回另一个函数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44585182/

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