所有的功能都是立即运行的,如何只运行main函数?

时间:2017-09-08 20:40:22

标签: f#

我正在学习F#,并且拥有以下代码: 问题是,当我运行项目时,所有功能都在立即运行。来自C#,我想象只有Main函数会运行。如何解决这个问题?这是一些缩进问题吗?

open System
open System.Windows.Forms 

let form 
    = 
        new Form
            (
                Width = 400, 
                Height = 300, 
                //Visible = false, 
                Text = "Hello World F#"
            )

let MyFunction1 
    = 
        System.Diagnostics.Process.Start("calc.exe")

let AnotherFunction 
    = 
        let agora = DateTime.Now
        let fn = @"C:\temp\testef.txt"
        System.IO.File.WriteAllText (fn, "Olá " + agora.ToString())
        System.Diagnostics.Process.Start("notepad.exe", fn)


[<EntryPoint>]
let main argv 
    =
        let f = form.ShowDialog()
        f |> Console.WriteLine
        0

enter image description here

2 个答案:

答案 0 :(得分:5)

您需要在函数中添加至少一个参数,否则它们将是不是函数的值。

如果你没有任何东西传递给函数,那么他们应该收到一个单位参数,例如这里它应该是:

let MyFunction1 ()
    = 
        System.Diagnostics.Process.Start("calc.exe")

当let绑定没有参数时,它变成一个值,并立即执行。

切换到函数式编程时的困惑在于,事实上函数也是值,可以传递的一等公民,但在F#等非惰性语言中,只有在调用站点提供参数时才执行代码。

答案 1 :(得分:2)

你的&#34;功能&#34;不接受任何论点,所以它们不是真正的功能,它们只是赋值语句。

let MyFunction1 = 
    System.Diagnostics.Process.Start("calc.exe")

此处执行Process.Start并将返回值分配给MyFunction。要解决此问题,请使您的函数接受单位作为参数:

let MyFunction1 () = 
    System.Diagnostics.Process.Start("calc.exe")