F#版本更新说明

     F#CTP 1.9.6.0更正列表: 

     1、名称空间必须使用完全限定名打开,名称空间不可以取别名。

     2、在fs,fsi文件中,除注释外,第一行必须使用#light或#light "off"

     3、元组类型互操作上发生了变动。

     新增了两个类型来提供互操作上的支持。TupleEnd,TupleNested,彻底解决了互操作上的不一致性。

 

let  tuple_7=( 1 , 2 , 3 , 4 , 5 , 6 , 7 )

let  tuple_9=( 1 , 2 , 4 , 8 , 16 , 32 , 64 , 128

let  tuple_7_1=( 1 , 2 , 4 , 8 , 16 , 32 ,( 64 , 128 ))

 

     对应的c#签名:  

 

public  static  Microsoft.FSharp.Core.Tuple< int int int int int int , Microsoft.FSharp.Core.TupleEnd< int >> tuple_7 { get; } 

public 
static  Microsoft.FSharp.Core.Tuple< int int int int int int , Microsoft.FSharp.Core.TupleEnd<Microsoft.FSharp.Core.Tuple< int int >>> tuple_7_1 { get; } 

public 
static  Microsoft.FSharp.Core.Tuple< int int int int int int , Microsoft.FSharp.Core.TupleNested<Microsoft.FSharp.Core.Tuple< int int >>> tuple_9 { get; }

 

     C#语言如果使用以下的规则,F#语言就可以正确的识别出元组。

      如果元组元素个数小于7,使用Tuple泛型,下面的代码,F#可以正确的转换为(1,2,3);     

 

new  Tuple< int , int , int >( 1 , 2 , 3 )

 

     等于七个元素,第七个元素使用TupleEnd包装,下面的代码,F#可以正确的转换为(1,2,3,4,5,6,7)   

 

net Tuple< int , int , int , int , int , int ,TupleEnd< int >)( 1 , 2 , 3 , 4 , 5 , 6 , new  TupleEnd< int >( 7 ))

 

      大于七个元素的元组,七个元素以上的使用TupleNested包装,下面的代码,F#可以正确的转换为(1,2,3,4,5,6,7,8)。 

 

new  Tuple< int int int int int int , TupleNested<Tuple< int int >>>
  (
1 2 3 4 5 6 new  TupleNested<Tuple< int int >>( new  Tuple< int int >( 7 8 )))

 

     为了给大家一个直观的映象,我给出完整的调用例子。    

     首先请建立一个c#类库工程,引用FSharp.Core.dll 

    


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.FSharp.Core;

namespace  TestFSharpTuple
{
    public 
class Class1
    
{

        public 
static Tuple<intintintintint> T1
        
{
            get 
{ return new Tuple<intintintintint>(12345); }
        }


        public 
static Tuple<intintintintintintint> T2
        
{
            get 
{ return new Tuple<intintintintintintint>(1234567); }
        }


        public 
static Tuple<intintintintintint, TupleEnd<int>> T3
        
{
            get 
{ return new Tuple<intintintintintint, TupleEnd<int>>(123456new TupleEnd<int>(7)); }
        }


        public 
static Tuple<intintintintintint, TupleNested<int>> T4
        
{
            get
            
{
                return 
new Tuple<intintintintintint, TupleNested<int>>
                    (
123456new TupleNested<int>(7));
            }

        }


        public 
static Tuple<intintintintintint, TupleNested<Tuple<intint>>> T5
        
{
            get
            
{
                return 
new Tuple<intintintintintint, TupleNested<Tuple<intint>>>
                    (
123456new TupleNested<Tuple<intint>>(new Tuple<intint>(78)));
            }

        }


        public 
static Tuple<intintintintint, TupleNested<Tuple<intintint>>> T6
        
{
            get
            
{
                return 
new Tuple<intintintintint,  TupleNested<Tuple<int,intint>>>
                   (
12345,  new TupleNested<Tuple<int,intint>>(new Tuple<int,intint>(6,78)));
            }

        }

    }

}

 

      在F#中分别调用 

 


printfn 
" %A "  TestFSharpTuple.Class1.T1
printfn 
" %A "  TestFSharpTuple.Class1.T2
printfn 
" %A "  TestFSharpTuple.Class1.T3
printfn 
" %A "  TestFSharpTuple.Class1.T4
printfn 
" %A "  TestFSharpTuple.Class1.T5
printfn 
" %A "  TestFSharpTuple.Class1.T6

 

    你会发现调用T2,T4均出错。T6不会出错,但可能不是你想要的结果,T6的结果为(1,2,3,4,5,(6,7,8))

 

     调用T2时的错误截图:

 

 

     调用T4的错误截图:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值