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

Scala中infix中缀函数是否支持传入额外参数?

结论

你最初的判断是正确的:Scala原生不支持a op(additionalParam) b这种形式的中缀调用语法。
Scala的中缀调用规则仅允许单参数方法使用a 方法名 b的写法,等价于a.方法名(b),没有预留在方法名和第二个操作数之间插入额外参数的语法位置。

可实现的替代方案(满足向op传递额外数值参数的诉求)
  • 方案1:柯里化方法+点调用
    将op方法定义为多参数列表的柯里化形式,调用写法接近你预期的结构:

    // 方法定义示例
    extension (a: Int)
      def op(extra: Int)(b: Int): Int = a + extra * b
    // 调用形式
    val res = a.op(additionalParam)(b)
    
  • 方案2:借助中间代理类实现近预期写法
    定义中间承载类传递左操作数和额外参数,再通过中缀方法接收右操作数,调用形式仅比你预期多一个连接符号:

    // 中间代理类
    class OpHolder(val left: Int, val extra: Int) {
      infix def apply(right: Int): Int = left + extra * right
      // 也可以自定义中缀符号,比如`@`
      infix def `@`(right: Int): Int = left + extra * right
    }
    
    extension (a: Int)
      infix def op(extra: Int): OpHolder = OpHolder(a, extra)
    
    // 调用形式1,用apply省略方法名
    val res1 = a op(additionalParam) (b)
    // 调用形式2,用自定义中缀符号
    val res2 = a op(additionalParam) @ b
    
  • 方案3:多参数中缀调用
    如果你可以接受把额外参数和右操作数放在一起,直接定义多参数方法即可,Scala支持多参数的中缀调用,所有参数放在括号里即可:

    extension (a: Int)
      infix def op(b: Int, extra: Int): Int = a + extra * b
    // 调用形式
    val res = a op (b, additionalParam)
    

内容的提问来源于stack exchange,提问作者Tschösi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 09:30:01