Gie*_* B. 3 f# type-constraints
我似乎无法找到一种方法来做这样的事情:
type Instance<'Aggregate when 'Aggregate :> Aggregate.T<'State,'Event,'Failure>> = {
...
Aggregate: 'Aggregate
CurrentState: 'State
...
}
Run Code Online (Sandbox Code Playgroud)
请注意,我想:
当然,这不会编译,因为'State没有定义.还有其他方法可以在保留实例含义的同时执行此操作吗?
我想到了一些简单的方法来做到这一点,但它们都失去了意义.例如Instance<'State,'Event,'Failure>并不完全相同Instance<'Aggregate>.
所有类型参数必须是明确的,所以你需要包括'State,'Event和'Failure:
type Instance<'Aggregate,'State,'Event,'Failure when 'Aggregate :> Aggregate.T<'State,'Event,'Failure>> = {
...
Aggregate: 'Aggregate
CurrentState: 'State
...
}
Run Code Online (Sandbox Code Playgroud)
但是,使用此类型时,您应该很少需要显式指定这些额外参数.在创建实例时,编译器应该能够推断它们,并且_即使必须Instance<_,_,_,_>明确命名类型,也可以使用匿名占位符来表示某些参数.