首页 / 微软技术 / .NET / F# 4.1提供改善,并支持与C# 7的互操作
fsharp

F# 4.1提供改善,并支持与C# 7的互操作

英文原文:F# 4.1 Brings Improvements and Interoperation with C# 7

F# 4.1对语言进行了很多改进。F# 4.1 将通过新版本的 Microsoft tools for F#提供,Microsoft tools for F#据说将于今年晚些时候发布。该版本支持结构体元组(struct tuples),与C# 7 的互操作,以及 by-ref 返回。

fsharp

由于F#的语法和类型推断简化了元组的使用,元组通常在F#中使用。它们是存储在堆栈上的引用类型。F# 4.1 中提供了存储在堆栈上的结构体元组。对于某些场景来说,性能得到了提升,比如说需要分配大量的小元组。

要支持 ValueTuple 类型,元组类型、元组表达式和元组模式可以用关键字 struct 来注释。












// Creating a new struct tuple.
let origin = struct (0, 0)

// Take struct tuples as arguments to a function and generate a new struct tuple.
let getPointFromOffset (point: struct (x, y)) (offset: struct (dx, dy)) = 
    struct (x + dx, y + dy)

// Pattern match on a struct tuple.
let doAMatch (input: struct (x, y)) =
    match input with
    | struct (0, 0) -> sprintf "The tuple is the origin!"
    | struct (_, _) -> sprintf "The tuple is NOT the origin!"

与C# 7 的互操作也支持使用 struct 关键字。




























// Calls a C# function returning a value tuple
let struct(word, value) = SomeService.SomeResult ()
// Calls a C# function taking a value tuple in parameter.
let result = SomeService.CreateResult (struct("hello", 12))

  除了元组之外,记录类型和可区分联合也可以表示为值类型。它需要 struct 注释。

 [<Struct>] 









 type Student = {
    Id: int
    Name: string
    Age: int
    GPA: double
    Major: string
}

[<Struct>] 




type Shape = 
| Circle of radius: float
| Square of side: int
| Rectangle of sides: double*double

 

F# 4.1 也提供 by-ref 返回。F#已经支持了 ref locals,但是不支持使用或生成 byref-returning 方法。
























// Returns from an array.
let f (x:int[] ) = &x.[0] 




// Returns from a record
[<Struct>] 






type R = { mutable z : int }
let f (x:byref<R>) = &x.z

  by-ref 返回也可以在 C# 的方法中使用。

public static ref int Find (int val, int[] 



 vals)
{
    for (int i = 0; i < vals.Length; i++)
    {
        if (vals[i] 

 == val)
        {
            return ref numbers[i] 





;
        }
    }
}

// 'result' is of type 'byref<int>'.
let result = SomeCSharpClass.Find (3, [| 1; 2; 3; 4; 5 |] )

 

除了 GitHub 上公布的F#源代码,你也可以参考公开的语言规范获取更多信息。



About worksguo

我顶的是太阳,蓝天都在我脚下。我是软件开发者,信息化专家,电子商务专家,金融学者,创业人。长期关注微软技术!

Check Also

.NET Core

微软发布 .NET Core 2.0 Preview 1

这是 .NET Core 2.0 的首次公开亮相,相比之前的版本它有很大的改进。你可以使用 Visual Studio 2017 Preview 15.3, Visual Studio for Mac 或者 VS Code 开发 .NET Core 2.0 应用程序。微软同时也发布了 ASP.NET Core 2.0 Preview 1 。

.NET

.NET Framework 4.7改进了WPF和WinForms

Microsoft 新发布的 .NET Framework 4.7 中绑定了一些更新,各部分协同构成了更好的整体架构。.NET Framework 4.7 是与 Windows 10 Creator Update 一并联合发布的,着重于对 UI 的提升、对加密支持改进以及常规性能提升。Microsoft 的 Rich Lander 在宣布本次公告时指出,当前 .NET Framework 4.7 已支持.NET Standard 1.6,今年稍后交付的版本将会支持.NET Standard 2.0。


x

更多推荐

.NET Framework 4.7改进了WPF和WinForms

F# 4.1对语言进行了很多改进。F# 4.1 将通过新版本的 Microsoft tools for F#提供,Microsoft tools for F#据说将于今年晚些时候发布。该版本支持结构体元组(struct tuples),与C# 7 的互操作,以及 by-ref 返回。

X#语言加入.NET家族 将于3月17日正式上线

F# 4.1对语言进行了很多改进。F# 4.1 将通过新版本的 Microsoft tools for F#提供,Microsoft tools for F#据说将于今年晚些时候发布。该版本支持结构体元组(struct tuples),与C# 7 的互操作,以及 by-ref 返回。

Rider IDE恢复了对.NET Core调试的支持

F# 4.1对语言进行了很多改进。F# 4.1 将通过新版本的 Microsoft tools for F#提供,Microsoft tools for F#据说将于今年晚些时候发布。该版本支持结构体元组(struct tuples),与C# 7 的互操作,以及 by-ref 返回。

powered by RelatedPosts