2009-12-27 32 views
1

我学习F#,我想知道如何像这样的片段可以写使用F#只:这段代码将如何使用F#重写?

2.times { 
    puts "hello" 
} 

如果你能解释一下如何/如果拿块功能在F#是可能的,那也会很棒。

+1

@Geo:F#有非常不同的习语,不要试图像在Ruby中那样表达事物。 – 2009-12-27 15:52:38

+1

@Mauricio:虽然有两次写“你好”的东西没什么特别的习惯。 – 2009-12-27 19:15:50

+1

@Dmitri:Geo对Rahul的回答评论为“不太Ruby,但它会做”。所以我上面的评论。 – 2009-12-27 22:46:36

回答

2

的时间函数可以被写为:

let times act n = 
    for i in 1 .. n do 
     act() 

和可被调用:

2 |> times (fun() -> printfn "Hello")  
+0

我认为他正在寻找lambda使用,我把printf作为lambda – 2009-12-27 15:38:57

+0

@Scheffer:根据您的建议进行编辑。谢谢! :) – missingfaktor 2009-12-27 15:50:17

+0

不完全是红宝石,但它会做 – Geo 2009-12-27 15:51:12

11

下面是一个使用的λ(基本上是红宝石块):

{1..2} |> Seq.iter (fun _ -> printfn "hello") 

这里的Seq.iter函数将lambda作为参数,它在每次迭代中执行。

+0

lambda中的'_'是什么代表? – Geo 2009-12-27 16:08:24

+0

这是一个通配符。 _将匹配任何值,并且是告诉编译器您不想使用此值的 的一种方式。 – missingfaktor 2009-12-27 16:31:39

+0

+1 - 用于功能性风格,不是强制性风格 – 2009-12-27 19:17:42

10

我没有编译器,所以有人请修复它,如果它不编译。这是一种定义相应的F#扩展成员的方法。

type System.Int32 with 
    member this.Times(act) = 
     for i in 1..this do 
      act() 

(2).Times (fun() -> printfn "Hello")