nval oracle,使用n个参数作为函数n类型的val实现def

val

不接受参数,因为它是计算的并存储在字段中。但我可能会把过去两天我在邮件列表上所做的大量文章介绍给你。

或者,更确切地说,让我们从Java的角度来考虑它,因为斯卡拉在JVM级别与Java兼容,并且它肯定必须遵守JVM规则。让我们从第一节课开始:

abstract class X {

def expensiveOperation(p: Int => Boolean) : List[Int]

}

现在,让我们扩展一下:

abstract class Y extends X {

override val expensiveOperation: ((Int) => Boolean) => List[Int]

}

所以,从Java,我们知道

X

有方法

expensiveOperation

,接收

Function1[Int, Boolean]

回报

List[Int]

.

现在我们去上课

Y

. 当然,它必须定义相同的方法,但也必须定义getter

昂贵的手术

,它不接收参数并返回

Function1[Function1[Int, Boolean],List[Int]]

.

只要这个附加方法不存在于

X

也是。那么让我们来定义它:

class Z extends Y {

override val extensiveOperation = new Function1[Function1[Int, Boolean], List[Int]] {

def apply(p: Int => Boolean) = List range (1, 10) filter p

}

}

如何定义?斯卡拉会复制吗

apply

的身体作为身体

昂贵的手术

(接收参数的那个,不是getter参数的那个)?它可能仍然可行。不过,让我们试试其他方法:

class W(f: ((Int) => Boolean) => List[Int]) extends Y {

override val extensiveOperation = f

}

现在,我们如何覆盖参数接收

extensiveOperation

?我想我们可以这样写:

override def extensiveOperation(p: Int => Boolean) = extensiveOperation.apply(p)

这是可行的。但我个人认为这有点复杂。我的建议是:写一个简短的sid,在scala邮件列表上达成一些协议。但是,如果没有代码来实现它,我认为它不太可能被采用——scala必须跟踪所有类型化的函数

瓦尔

以确定它是否覆盖

def

或者没有。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值