我可以使用F#中的管道运算符将参数传递给构造函数吗?

栏目: ASP.NET · 发布时间: 7年前

内容简介:翻译自:https://stackoverflow.com/questions/4111774/can-i-use-the-pipeline-operator-in-f-to-pass-an-argument-to-a-constructor

此代码反转字符串:

let reverse (s : string) = new string(s.ToCharArray() |> Array.rev)

可以使用管道运算符重写它以将所需的参数传递给string()构造函数吗?例如,这似乎更惯用:

// Doesn't compile:
let reverse (s : string) = s.ToCharArray() |> Array.rev |> new string

同样,为什么我不能以下列方式使用字符串运算符?

let reverse2 (s : string) = s.ToCharArray() |> Array.rev |> string

这是在行动:

> reverse2 "foo" ;;
val it : string = "System.Char[]"

它返回的类型而不是“oof”.

不,管道运算符只能与F#函数一起使用,它不能与类构造函数,成员方法或静态方法一起使用.原因是这些方法支持的重载会使F#的类型推断变得复杂.但是,如果您真的想使用管道,可以将char数组的每个元素映射到String,然后将该序列传递到Seq.concat“”:

s.ToCharArray() |> Array.rev |> Seq.map(string) |> String.concat ""

或者你可以用F#方法包装字符串构造函数调用:

let stringCArrCtor (carr: char[]) =
    new string(carr)

s.ToCharArray() |> Array.rev |> stringCArrCtor

并回答你的最后一个问题,

s.ToCharArray() |> Array.rev |> string

不能使用,因为它相当于

(s.ToCharArray() |> Array.rev).ToString()

并且不会覆盖Array ToString()方法,因此它只返回默认的反射类型名称.

翻译自:https://stackoverflow.com/questions/4111774/can-i-use-the-pipeline-operator-in-f-to-pass-an-argument-to-a-constructor


以上所述就是小编给大家介绍的《我可以使用F#中的管道运算符将参数传递给构造函数吗?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

Convergence Culture

Convergence Culture

Henry Jenkins / NYU Press / 2006-08-01 / USD 30.00

"Convergence Culture" maps a new territory: where old and new media intersect, where grassroots and corporate media collide, where the power of the media producer, and the power of the consumer intera......一起来看看 《Convergence Culture》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

MD5 加密
MD5 加密

MD5 加密工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具