gpt4 book ai didi

scala - 将函数从类型 T 转换为类型 U> :T

转载 作者:行者123 更新时间:2023-12-04 04:58:02 26 4
gpt4 key购买 nike

我有一个关于创建一个由函数 T=>Boolean 表示的逆变集的问题,如果集合中有内容,则返回 true,否则返回 false。它看起来像这样:

class BoolSet[-T](f: T=>Boolean) {

def contains(x:T): Boolean = f(x)

def add(x:T): BoolSet[T] = return new BoolSet[T](((y: T)=> f(y) || y==x))

def remove(x:T): BoolSet[T] = if(f(x)) return new BoolSet[T](((y: T)=> f(y) && y!=x)) else return this

def union[U>:T](s : BoolSet[U]) : BoolSet[U] = return new BoolSet[U](((y: U) => this.contains(y) || s.contains(y)))

}

我在使用联合函数时遇到问题,因为 this.contains是一个函数 T=>Boolean而不是 U=>Boolean .如何将此函数从 T 型转换为 U 型?

我不明白为什么这不起作用,因为 T 是 U 的子类型,所以你可以做的一切 T 也可以做吗?

最佳答案

您应该更改方法的签名 union

def union[U<:T](s : BoolSet[U]) : BoolSet[U]


def union[U>:T](s : BoolSet[U]) : BoolSet[T]

原因是类型 T逆变在类 BoolSet , 表示 BoolSet[A]BoolSet[B] 的子类型如果 B <: A .

关于scala - 将函数从类型 T 转换为类型 U> :T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16506164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com