如何理解特定的F#语法
在本声明末尾:如何理解特定的F#语法,f#,arguments,let,F#,Arguments,Let,在本声明末尾: let (a,b,c) = (1,2,3) in printfn "%i,%i" a b;; ,有 a b;; 结尾“a”和“b”的用法是什么?它们是某个函数调用的参数,还是前一个函数的返回值(元组)?如果是这样,let(a,b,c)的用法是什么,我想它应该定义一个由3个元素组成的元组,但是printfn在语句中做什么呢 换句话说,如何将这个复杂的语句拆分为几个更容易理解的较短语句?我不会放弃“让…进来”的语义学。有什么解释吗 谢谢。让(a,b,c)=(1,2,3)进入…的意
let (a,b,c) = (1,2,3) in printfn "%i,%i" a b;;
,有
a b;;
结尾“a”和“b”的用法是什么?它们是某个函数调用的参数,还是前一个函数的返回值(元组)?如果是这样,let(a,b,c)的用法是什么,我想它应该定义一个由3个元素组成的元组,但是printfn在语句中做什么呢
换句话说,如何将这个复杂的语句拆分为几个更容易理解的较短语句?我不会放弃“让…进来”的语义学。有什么解释吗
谢谢。让(a,b,c)=(1,2,3)进入…
的意思是:在里面,
a
应该有值1
,b
应该有值2
和c
应该有3
(这些绑定将只存在于..
主体内部-这都是一个表达式-结果将是..
的任何结果)
为此,元组(1,2,3)
被分解为(a,b,c)
现在,…
是printfn“%i,%i”a b
-printfn“%i,%i”
被编译成一个函数,它接受两个整数(以货币形式)并打印出来(它们之间有一个,
)
正如您所见,您使用参数a
和b
调用此函数(记住上面的那些值)
总的来说,您将打印出1,2
忽略了c
get`s,因此另一种编写方法是
let (a,b,_) = (1,2,3) in printfn "%i,%i" a b
关键字中的
将中间绑定组合到一个表达式中,而不是使用命令式的不同语句序列。OCAML(F#从中派生)在许多情况下需要这种面向表达式的语法。F#允许更面向语句的结构
您可以将其视为用英语描述您的课程的不同(但等效)方式之间的差异:
- “在下面的示例中,让a=1和b=2:将‘a,b’打印到控制台”(表达式样式-中间绑定只是“前导”到最终的表达式体)
- “将a设置为1。然后将b设置为2。然后将“a,b”打印到控制台。”(语句样式-每个步骤都是不同的,并且没有太多的意义将所有步骤组合在一起)
后一个短语对应于以下代码,其作用与原始代码相同:
let a = 1
let b = 2
printfn "%i,%i" a b
[注意-Carsten的答案非常好,因为解构和未使用的c
,所以我只关注中的。]a和b是printf的参数