使用"fst"从元组中提取第一个元素,抛出错误"type mismatch"

Exc*_*ion 5 f# tuples

这是我采取的元组

 let person = ("Prathap Reddy SV", "Male", 16)
 let name = fst person   

 or 

 let person = ("Prathap", "Male", 16)
 let name = fst person  
Run Code Online (Sandbox Code Playgroud)

当我编译这个显示下面的输出

 > let person = ("Prathap Reddy SV", "Male", 16)
   let name = fst person

   let name = fst person
   ---------------^^^^^^

   stdin(152,16): error FS0001: Type mismatch. Expecting a
   string * string    
 but given a
   string * string * int    
 The tuples have differing lengths of 2 and 3   
Run Code Online (Sandbox Code Playgroud)

但是,当我给两个字符串值的元组时,它工作正常.

Gen*_*ski 7

签名fst('a * 'b -> 'a),这就是你收到给定错误的原因.

该函数fst需要两个元素的元组,但是你提供了三个元素的元组.对于三个字符串的元组,错误将是相同的:fst ("a","b","c")将产生

stdin(1,6): error FS0001: Type mismatch. Expecting a
    'a * 'b    
but given a
    'a * 'b * 'c    
The tuples have differing lengths of 2 and 3
Run Code Online (Sandbox Code Playgroud)


wil*_*ilx 6

您应该能够let name, _, _ = person从三联中获取名称.

编辑:您不能使用fst三元组,因为签名fst是这样的:fst : 'T1 * 'T2 -> 'T1