C # 기본 키워드의 F #에 해당하는 것은 무엇입니까?


79

default예를 들어 C # 키워드에 해당하는 것을 찾고 있습니다 .

public T GetNext()
{
    T temp = default(T);
            ...

감사

답변:



34

기술적으로 말하면 F # 함수 Unchecked.defaultof<'a>defaultC # 의 연산자 와 동일합니다 . 그러나 F # defaultof에서는 안전하지 않은 것으로 간주되며 실제로 필요할 때만 사용해야합니다 ( nullF #에서도 권장되지 않는를 사용 하는 것과 같이 ).

대부분의 상황 defaultof에서 option<'a>유형 을 사용하여 필요를 피할 수 있습니다 . 값을 아직 사용할 수 없다는 사실을 나타낼 수 있습니다.

그러나 여기에 아이디어를 보여주는 간단한 예가 있습니다. 다음 C # 코드 :

    T temp = default(T);
    // Code that may call: temp = foo()
    if (temp == default(T)) temp = bar(arg)
    return temp;

F #에서 다음과 같이 작성 될 수 있습니다 (명령형 기능 사용).

    let temp = ref None
    // Code that may call: temp := Some(foo())
    match !temp with 
    | None -> bar(arg)
    | Some(temp) -> temp

물론 이것은 특정 시나리오에 따라 다르며 경우에 따라 defaultof수행 할 수있는 유일한 작업입니다. 그러나 defaultofF #에서 덜 자주 사용 된다는 점을 지적하고 싶었습니다 .


1
C # 예제에서는 if 문 내에서 같음 연산자 대신 할당 연산자를 사용합니다. 의도적입니까?
doppelgreener 2013 년

나는 그것이 나를 위해 작동하지 않는다고 말해야한다, let t = ref None t : = Some (context.Items.FirstOrDefault (fun ii-> ii.Name = i.Name)) match! t with | 일부 it->-여기에서 끝났어도 null | 없음-> 무시
Martin Bodocky

@MartinBodocky 코드는 항상 Some(_). 반환 Some(value)하거나 Some(defaultof<>)둘 다 Some _일치 표현식 의 대소 문자와 일치합니다. 다음을 사용할 수 있습니다 context.Items |> Seq.tryFind(fun II -> ii.Name = i.Name). 일치식이 예상대로 작동합니다
Rune FS
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.