Rus*_*tam 12 f# tuples operators
我想给一个printf
函数一个元组:
let tuple = ("Hello", "world")
do printfn "%s %s" tuple
Run Code Online (Sandbox Code Playgroud)
当然,这不起作用,编译器首先说,它需要string
而不是string*string
.我写的如下:
let tuple = ("Hello", "world")
do printfn "%s %s" <| fst tuple
Run Code Online (Sandbox Code Playgroud)
然后编译器合理地注意到现在我有类型的函数值string -> unit
.说得通.我可以写
let tuple = ("Hello", "world")
do printfn "%s %s" <| fst tuple <| snd tuple
Run Code Online (Sandbox Code Playgroud)
它对我有用.但我想知道,如果有任何方法可以做得更好,就像
let tuple = ("Hello", "world")
do printfn "%s %s" <| magic tuple
Run Code Online (Sandbox Code Playgroud)
我的问题是我无法获得printf需要哪种类型以便打印两个参数.什么magic
功能看起来像?
Guy*_*der 24
你要
let tuple = ("Hello", "world")
printfn "%s %s" <|| tuple
Run Code Online (Sandbox Code Playgroud)
请注意双重||
输入<||
而不是单个|
输入<|
请参阅:MSDN<||
你也可以
let tuple = ("Hello", "world")
tuple
||> printfn "%s %s"
Run Code Online (Sandbox Code Playgroud)
还有其他类似的运营商,如|>
,||>
,|||>
,<|
,<||
,和<|||
.
一个惯用的方式做到这一点使用fst
和snd
是
let tuple = ("Hello", "world")
printfn "%s %s" (fst tuple) (snd tuple)
Run Code Online (Sandbox Code Playgroud)
您通常不会看到使用||>或<||之一传递给函数的元组的原因 运营商是因为所谓的解构.
破坏表达式采用复合类型并将其破坏为部分.
因此,tuple ("Hello", "world")
我们可以创建一个析构函数,将元组分成两部分.
let (a,b) = tuple
Run Code Online (Sandbox Code Playgroud)
我知道对于刚接触F#的人来说,这可能看起来像一个元组构造函数,或者看起来甚至更奇怪,因为我们有两个值被绑定,(注意我说绑定并没有分配),但它需要带有两个值的元组并对其进行解构分成两个独立的值.
所以我们在这里使用解构表达式.
let tuple = ("Hello", "world")
let (a,b) = tuple
printfn "%s %s" a b
Run Code Online (Sandbox Code Playgroud)
或更常见的
let (a,b) = ("Hello", "world")
printfn "%s %s" a b
Run Code Online (Sandbox Code Playgroud)