시퀀스의 누적 합계를 계산하는 함수가 있습니다. 그것은 일반적인 보이지만제네릭 함수의 제로
let cumsum<'T> = Seq.scan (+) 0 >> Seq.skip 1 >> Seq.toArray
는 정수 0
는 제네릭이 아닌 수, 따라서 나는 수레의 순서로 함수를 호출 할 수 없습니다.
내 하드 코드 된 0
을 대체 할 수있는 제로가 있습니까? 아니면 기능을 제네릭으로 만드는 다른 방법 일 수 있습니다.
시퀀스의 누적 합계를 계산하는 함수가 있습니다. 그것은 일반적인 보이지만제네릭 함수의 제로
let cumsum<'T> = Seq.scan (+) 0 >> Seq.skip 1 >> Seq.toArray
는 정수 0
는 제네릭이 아닌 수, 따라서 나는 수레의 순서로 함수를 호출 할 수 없습니다.
내 하드 코드 된 0
을 대체 할 수있는 제로가 있습니까? 아니면 기능을 제네릭으로 만드는 다른 방법 일 수 있습니다.
당신은 GenericZero 원시적 사용할 수 있지만 당신은 당신의 함수를 인라인을 명시 적으로 그것을 할 수 없습니다 원칙 값 이후 (지금 당신의 기능이 point-free style로 작성) 함수해야 인라인. cumsum`가 순서 값 대신 인라인 함수 이루어져야
val inline cumsum :
s:seq< ^a> -> ^b []
when (^b or ^a) : (static member (+) : ^b * ^a -> ^b) and
^b : (static member get_Zero : -> ^b)
LanguagePrimitives.GenericZero
:
이
주'있음 : Type 파라미터를 제거
는'T
고정 부재 제약 컴파일러에 의해 자동적으로 추정되는참고 즉''인라인 cumsum x = x |> Seq.scan (+) LanguagePrimitives.GenericZero |> Seq.skip 1 |> Seq.toArray'와 같은 효과가 있습니다. – ildjarn
심지어 reddit를 확인할 때가 없었어요! :) – kasperhj
@ildjarn 왜 그런가요? – kasperhj