11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

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

  • 2017-02-06
  • 本文字数:1063 字

    阅读完需:约 3 分钟

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

由于 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#源代码,你也可以参考公开的语言规范获取更多信息。

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

2017-02-06 18:001125
用户头像

发布了 217 篇内容, 共 58.9 次阅读, 收获喜欢 72 次。

关注

评论 1 条评论

发布
用户头像
借博主宝地一用,给大家推荐一个最近很火的接口管理工具apipost,很好用,有时间可以试试
2022-04-13 20:59
回复
没有更多了
发现更多内容
F# 4.1提供改善,并支持与C# 7的互操作_.NET_Pierre-Luc Maheu_InfoQ精选文章