微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在带有通配符的匿名函数中使用方括号

如何解决在带有通配符的匿名函数中使用方括号

我目前正在学习 Scala,并且正在使用带有 _ 通配符的匿名函数。这对我来说很有意义:

// Creates function operation(a,b,c) => a + (b / c)
var operation = (_:Double) + (_:Double) / (_:Double)

我不明白的是如何将 operation 更改为返回 (a + b) / c。这些都不起作用:

// Attempting to create function operation(a,c) => (a + b) / c
var operation = ((_:Double) + (_:Double)) / (_:Double)
// error: value / is not a member of (Double,Double) => Double
var operation = ((_:Double) + (_:Double)).todouble / (_:Double)
// error: value todouble is not a member of (Double,Double) => Double

我猜这是因为将 (_:Double) + (_:Double) 放在方括号中会将其转换为 (Double,Double) => Double 函数类型。但是,我如何实际更改操作顺序?这甚至可能吗?

解决方法

由于 + 只是 Scala 中的另一种方法,您可以这样做,像使用 . 的另一种方法一样调用它:

var operation = (_: Double).+(_: Double) / (_: Double)

但是,在我看来,下划线应该只用于微小的、无关紧要的函数(例如 foo.reduce(_ ^ _))。如果您需要使用类型归属并使用语法玩游戏,最好将该函数转换为 (a: Double,b: Double,c: Double) => (a + b) / c,或者甚至更好,将其设为方法。另一件事 - 在 Scala 中,val(不可变)优于 var(可变)。请尽可能使用前者。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。