Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 如何在泛型函数中定义F#泛型函数参数? 让GetLogicalWithDoubleLevel元素DoubleLevel元素> (logicalModifier:InletPosition*OutletPosition->Logical) (逻辑:逻辑)=_Generics_F# - Fatal编程技术网

Generics 如何在泛型函数中定义F#泛型函数参数? 让GetLogicalWithDoubleLevel元素DoubleLevel元素> (logicalModifier:InletPosition*OutletPosition->Logical) (逻辑:逻辑)=

Generics 如何在泛型函数中定义F#泛型函数参数? 让GetLogicalWithDoubleLevel元素DoubleLevel元素> (logicalModifier:InletPosition*OutletPosition->Logical) (逻辑:逻辑)=,generics,f#,Generics,F#,我需要logicalModifier成为泛型函数,其类型参数与getLogicalWithDoubleLevelElement的类型参数相同 如何定义它?如果需要将显式多态函数作为参数传递,那么在F#中实现这一点的唯一方法是使用新类型和泛型方法: let getLogicalWithDoubleLevelElement<'E when 'E :> DoubleLevelElement> (logicalModifier : InletPosition * OutletP

我需要
logicalModifier
成为泛型函数,其类型参数与
getLogicalWithDoubleLevelElement
的类型参数相同


如何定义它?

如果需要将显式多态函数作为参数传递,那么在F#中实现这一点的唯一方法是使用新类型和泛型方法:

let getLogicalWithDoubleLevelElement<'E when 'E :> DoubleLevelElement>
    (logicalModifier : InletPosition * OutletPosition -> Logical)
    (logical : Logical) =
类型逻辑修改器=
抽象MakeLogical DoubleLevelElement>:InletPosition*OutletPosition->Logical
让GetLogicalWithDoubleLevel元素DoubleLevel元素>
(logicalModifier:logicalModifier)

(逻辑:逻辑)=。。。logicalModifier.MakeLogicalre-use
'E
?应该很好,约翰回答了你的问题。我不确定是否存在更大的误解,因为您的函数名可能无法反映函数的签名。您希望GetLogicalWithDoubleLevel元素将逻辑作为其参数之一,还是希望它返回逻辑或两者都返回?它使用修饰符函数,而不是逻辑,超过修改的返回值Logical@JohnPalmer你能提供一段代码吗?我假设相关的签名是
logicalModifier:'E->Logical
或类似的东西-你不太清楚你想要什么
type LogicalModifier =
    abstract MakeLogical<'E when 'E :> DoubleLevelElement> : InletPosition * OutletPosition -> Logical

let getLogicalWithDoubleLevelElement<'E when 'E :> DoubleLevelElement>
    (logicalModifier : LogicalModifier)
    (logical : Logical) = ... logicalModifier.MakeLogical<'E> ...