2009-12-27 52 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")