Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
#缩进;关「;在F#_F#_Indentation - Fatal编程技术网

#缩进;关「;在F#

#缩进;关「;在F#,f#,indentation,F#,Indentation,我刚开始学习F#,并尝试了以下代码: 我更喜欢制表符而不是空格,因此我将代码改为: #indent "off" open System open System.Windows.Forms let form = new Form(Visible=true, TopMost=true, Text="Welcome to F#") let label = let temp = new Label() let x = 3 + (4 * 5) temp.Text <- s

我刚开始学习F#,并尝试了以下代码:

我更喜欢制表符而不是空格,因此我将代码改为:

#indent "off"
open System
open System.Windows.Forms

let form = new Form(Visible=true, TopMost=true, Text="Welcome to F#")

let label =
    let temp = new Label()
    let x = 3 + (4 * 5)
    temp.Text <- sprintf "x = %d" x
    temp

form.Controls.Add(label)

[<STAThread>]
Application.Run(form)
#缩进“off”
开放系统
打开System.Windows.Forms
让表单=新表单(Visible=true,TopMost=true,Text=“欢迎来到F#”)
让标签=
let temp=新标签()
设x=3+(4*5)
temp.Text如果使用“#缩进关闭”,则会丢失所有更简单的空格感知语法,并且必须重新使用例如

#indent "off"

open System
open System.Windows.Forms

let label =   
    let temp = new Label() in
    let x = 3 + (4 * 5) in   
    temp.Text <- sprintf "x = %d" x;   
    temp;;

let form = 
    let f = new Form() in
    f.Controls.Add(label);
    f;;

[<STAThread>]   
do Application.Run(form)     
#缩进“off”
开放系统
打开System.Windows.Forms
让标签=
将temp=新标签()放入
设x=3+(4*5)英寸

临时文本这个话题已经讨论过了。正如Brian所解释的,关闭“轻量级”语法意味着您必须使用与OCaml兼容的语法进行编写

我相信在大多数情况下,基于缩进的语法更具可读性(因此值得从制表符切换到空格)。但是,带有附加噪声的语法(如
;中的
)揭示了更多关于语言结构的信息,因此在学习F#时简单地使用它可能会很有用

以下示例显示了您需要编写的所有其他内容:

let add a b c =  
  let ab = a + b in // 'in' keyword specifies where binding (value 'ab') is valid 
  printfn "%d" ab;  // ';' is operator for sequencing expressions 
  c - ab;;          // ';;' is end of a function declaration 

对于更多的讨论,.

anta40说“我更喜欢制表符而不是空格”。不太清楚为什么在F#for light语法中不允许缩进制表符?想象一下,有人有他最喜欢的文本编辑器和一些文本工具,只是多年来养成的习惯,用于制表符,而不是空格…现在F#只有两种选择:空格亮起,制表符熄灭。@anta40-IIRC,问题是不同的编辑器可以使用不同宽度的制表位,也可以在空格中混合。由于更改制表符宽度可能会更改任何给定行的缩进级别,这也可能会更改程序本身的含义,导致很难注意到错误。@JamesHugard制表符本身只是一个字符。它没有“宽度”。选项卡宽度只是显示文本的图形概念。我确实同意,混合制表符和空格可能会导致难以注意到的错误。制表符和空格的混合对控制结构来说是不负责任的,但考虑到即使Python允许在任何唯一的作用域级别使用其中一种,F#完全禁止制表符也是荒谬的。@zoey,或者,您可能会很高兴代码在每个系统上看起来都一样,不再需要tab vs spaces战争。垂直对齐很重要,一个或两个位置有微妙的向外倾斜规则,这在标签上根本不可能实现。返回到允许制表符,将意味着更有限的语法和清晰度的损失。哈哈哈,只是证明更喜欢制表符而不是空格是错误的,错误的,错误的!:)@本约尔。。。{愤怒的脸表情}如OCaml中的
在这里不是必需的。