#缩进;关「;在F#
我刚开始学习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
#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中的代码>在这里不是必需的。