我将如何在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);
}
}
Run Code Online (Sandbox Code Playgroud)
Bri*_*ian 27
F#中的多行lambda就是
(fun args ->
lots
of
code
here
)
Run Code Online (Sandbox Code Playgroud)
整个代码就像是
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)
Run Code Online (Sandbox Code Playgroud)
假设我没有抄写错误.(我在公共接口中使用了F#函数类型而不是Action委托.)
如果您只想编写多行lambda,则可以使用括号内的分号运算符将多个语句串在一起.例:
(fun () -> (write_line "line 1" ; write_line "line 2"))
Run Code Online (Sandbox Code Playgroud)
和
(fun val -> (write_line "line 1" ; write_line val))
Run Code Online (Sandbox Code Playgroud)
虽然我给出的第二个例子只有在val的类型是字符串时才有效.
警告:我不知道F#的细节.我是从Objective Caml背景写的.这些语言非常相似,但可能会有一些差异使我的建议略显错误.此外,我现在不在使用ocaml或F#解释器的机器,因此我无法检查这些片段以确保它们正常工作.
归档时间: |
|
查看次数: |
5275 次 |
最近记录: |