문제

f#에서 어떻게 이것을할까요 (c#)

public class MyClass
{
    void Render(TextWriter textWriter)
    {
        Tag(() =>
                {
                    textWriter.WriteLine("line 1");
                    textWriter.WriteLine("line 2");
                });
        Tag(value =>
                {
                    textWriter.WriteLine("line 1");
                    textWriter.WriteLine(value);
                }, "a");
    }

    public void Tag(Action action)
    {
        action();
    }
    public void Tag<T>(Action<T> action, T t)
    {
    action(t);
    }
}
도움이 되었습니까?

해결책

F#의 멀티 라인 람다는 단지입니다

(fun args ->
    lots
    of
    code
    here
)

전체 코드는 같은 것입니다

open System.IO

type MyClass() as this =
    let Render(tw : TextWriter) =
        this.Tag(fun() ->
            tw.WriteLine("line1")
            tw.WriteLine("line2")
        )
        this.Tag(fun(value : string) ->
            tw.WriteLine("line1")
            tw.WriteLine(value)
        , "a"
        )
    member this.Tag(action) = 
        action()
    member this.Tag(action, x) =
        action(x)

전사 오류가 없다고 가정합니다. (공개 인터페이스의 조치 대의원보다는 F# 함수 유형을 사용했습니다.)

다른 팁

당신이 원하는 것은 멀티 라인 람다를 쓰기 만하면, 괄호 안에 세미콜론 연산자를 사용하여 여러 문을 함께 문자 할 수 있습니다. 예시:

(fun () -> (write_line "line 1" ; write_line "line 2"))

그리고

(fun val -> (write_line "line 1" ; write_line val))

내가 준 두 번째 예제는 발의 유형이 문자열 인 경우에만 작동합니다.

경고 : 나는 F#의 세부 사항을 모른다. 나는 이것을 객관적인 CAML 배경에서 작성하고 있습니다. 언어는 매우 비슷하지만 내 제안을 약간 잘못 만드는 차이가있을 수 있습니다. 또한, 나는 지금 OCAML 또는 F# 통역사가있는 기계에 있지 않으므로이 스 니펫을 확인하여 작동하는지 확인할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top