You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala多级柯里化类构造函数实例化类型匹配问题求助

Scala柯里化构造器分步实例化问题解决办法

这个需求完全可以实现,你遇到的问题是Scala类型推断的默认行为导致的——当你用MyClass(a, b)(_)(_)时,编译器会自动将两个跨参数组的下划线占位符合并,把函数类型推断为(String, Long) => MyClass,而非嵌套的柯里化函数类型。

正确的实例化方式有两种:

  1. 显式指定函数类型
    通过给变量标注目标类型,强制编译器按照柯里化的嵌套函数来推断:
val a = 1
val b = 2
val myConstructor: String => Long => MyClass = MyClass(a, b)(_)(_)
// 此时调用 myConstructor("test") 会返回 Long => MyClass 类型的函数
  1. 分步推导函数
    先生成第一个参数组的部分应用函数,再基于它生成第二个参数组的部分应用函数,让编译器逐步推断类型:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 06:27:08