type FFRec<'state when 'state: (member Tape: Stack<unit -> unit>)
and 'state: (member Mem: ObjectPool)
and 'state: (member Str: CudaStream)
and 'state: (member Workspace: Workspace)
and 'state: (member IsInferenceOnly: bool)> =
{
W: d2M
b: d2M
a: d2M -> 'state -> d2M * 'state
}
인터페이스로 모든 멤버 제약을 교체 할 수 있지만, 그 접근 방식에 작은 문제는 컴파일러가 인식 할만큼 똑똑하지 있다는 것을 나는 예를 들어 다음과 같은 기능이있는 경우 :멤버 제약 조건을 사용하여 유형 약어를 만들 수 있습니까?
let inline reluInitializer (state: ^state) (a: ^a) =
let scale = (1.0f/sqrt(addDims a |> float32))
fillRandomUniformMatrix((str state),a,scale,0.0f)
a
^state
은 인터페이스 제약 조건이 있어야하고 설명 할 수없는 서명을 제공해야하며 구현은 일반 제네릭 매개 변수 선언에서 오류가 다를 수 있습니다.
가능하다면 명시 적 인터페이스보다 멤버 제약 조건을 사용하고 싶지만 형식 약어를 사용하여 위의 제약 조건 선언을 더 짧게 만들 수있는 방법을 찾지 못했습니다. 현재 F #에서 가능하겠습니까?
'인라인'키워드를 살펴보십시오. 그것은 F #이하는 일에 가장 좋은 근사치입니다. – asibahi