Scala多级柯里化类构造函数实例化类型匹配问题求助
Scala柯里化构造器分步实例化问题解决办法
这个需求完全可以实现,你遇到的问题是Scala类型推断的默认行为导致的——当你用MyClass(a, b)(_)(_)时,编译器会自动将两个跨参数组的下划线占位符合并,把函数类型推断为(String, Long) => MyClass,而非嵌套的柯里化函数类型。
正确的实例化方式有两种:
- 显式指定函数类型
通过给变量标注目标类型,强制编译器按照柯里化的嵌套函数来推断:
val a = 1 val b = 2 val myConstructor: String => Long => MyClass = MyClass(a, b)(_)(_) // 此时调用 myConstructor("test") 会返回 Long => MyClass 类型的函数
- 分步推导函数
先生成第一个参数组的部分应用函数,再基于它生成第二个参数组的部分应用函数,让编译器逐步推断类型:
val a = 1 val b = 2 // 先绑定a、b,得到接收String并返回Long=>MyClass的函数 val stringToConstructor = MyClass(a, b)(_) // 再基于上面的函数,得到最终的嵌套柯里化函数 val myConstructor = stringToConstructor(_) // 或者直接一步写: val myConstructor = (s: String) => MyClass(a, b)(s)(_)
原理说明
Scala的下划线占位符在跨多个参数组使用时,默认会被解析为“多参数的单个函数”,而非“嵌套的柯里化函数”。通过显式类型标注或分步构造,能引导编译器按照你预期的柯里化函数结构来处理。
内容的提问来源于stack exchange,提问作者Sydney Osborn
相关产品推荐
相关产品推荐

