And*_*dry 6 .net syntax f# constructor
在了解了这门语言最重要的功能后,我现在正在接近F#课程.那么,类定义语法并不容易理解,但是现在我清楚了一些主要概念,但其他概念却没有.
1)我想知道的第一件事就是正确/不正确.我知道可以用两种方式定义类:
这是对的吗???
2)我在理解显式类中构造函数的语法时遇到问题.考虑以下:
这是第一个版本:
(* COMPILES :) *)
type MyType =
val myval: int
val myother: int
(* Constructor *)
new (a: int, b: int) = {
myval = a;
myother = b;
}
Run Code Online (Sandbox Code Playgroud)
这是第二个版本:
(* COMPILES :) *)
type MyType =
val myval: int
val myother: int
(* Constructor *)
new (a: int, b: int) = {
myval = a (* No semicolon *)
myother = b (* No semicolon *)
}
Run Code Online (Sandbox Code Playgroud)
这是最后一个版本:
(* DOES NOT COMPILE :( *)
type MyType =
val myval: int
val myother: int
(* Constructor *)
new (a: int, b: int) =
myval = a (* Using the normal indent syntax, without {} *)
myother = b (* Using the normal indent syntax, without {} *)
Run Code Online (Sandbox Code Playgroud)
我不明白为什么前两个版本编译而第三个使用常规缩进语法却没有.此问题仅在构造函数中发生,因为在成员上我可以使用缩进语法
(* COMPILES :) *)
type MyType =
val myval: int
val myother: int
(* Constructor *)
new (a: int, b: int) = {
myval = a (* No semicolon *)
myother = b (* No semicolon *)
}
(* Indentation accepted, no {} to be inserted *)
member self.mymember =
let myvar = myval
myvar + 10
Run Code Online (Sandbox Code Playgroud)
为什么新函数(构造函数)需要{}括号????? 我不喜欢它,因为它似乎考虑了一个序列.此外,我的代码也在{}球拍中,在一条指令和另一条指令之间插入时没有分号.为什么????
关于2),构造函数的主体与典型函数的主体不同 - 它具有受限制的语法形式,并且在该{ }部分中它只能包含对父构造函数的调用和字段的赋值(类似于记录构造) 。{ }定义普通成员时,即使您愿意,也不能将各个表达式包装起来(也就是说,在这种情况下大括号不是可选的,它们是被禁止的)。