gpt4 book ai didi

scala - 如何使以下代码类型安全?

转载 作者:行者123 更新时间:2023-12-04 13:05:35 25 4
gpt4 key购买 nike

比方说,我有一个通用的命令特性,它有一个执行方法,它接受一个输入并返回一个输出。就像是

trait Input;
trait Output;

trait Command[I <: Input, O <: Output] {
def execute(input: I): O;
}

然后,我将创建各种命令,例如
class SampleInput extends Input
class SampleOutput extends Output

class SampleCommand extends Command[SampleInput, SampleOutput] {
def execute(input:SampleInput):SampleOutput = new SampleOutput()
}

问题是我可以用 SampleAInput 创建一个命令和 SampleBOutput编译器会很高兴地接受这一点。我如何强制执行,以便编译器因类型不匹配错误而失败?

不知何故,我需要分组 InputOutput在一个类型下并传递该类型以创建一个
命令。我怎么做?

最佳答案

trait InputOutput {
type Input
type Output
}

trait Command[IO <: InputOutput] {
def execute(input: IO#Input): IO#Output
}

下面是一些用法:
scala> trait SampleIO extends InputOutput {type Input = String; type Output = String}
defined trait SampleIO

scala> class SampleCommand extends Command[SampleIO] {def execute(input: String) = input}
defined class SampleCommand

scala> class SampleCommand extends Command[SampleIO] {def execute(input: String) = 1}
<console>:13: error: type mismatch;
found : Int(1)
required: SampleIO#Output
class SampleCommand extends Command[SampleIO] {def execute(input: String) = 1}
^

关于scala - 如何使以下代码类型安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4486647/

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