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

查看所有标签

猜你喜欢:

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

精通Java并发编程(第2版)

精通Java并发编程(第2版)

[西] 哈维尔·费尔南德斯·冈萨雷斯 / 唐富年 / 人民邮电出版社 / 2018-10 / 89.00元

Java 提供了一套非常强大的并发API,可以轻松实现任何类型的并发应用程序。本书讲述Java 并发API 最重要的元素,包括执行器框架、Phaser 类、Fork/Join 框架、流API、并发数据结构、同步机制,并展示如何在实际开发中使用它们。此外,本书还介绍了设计并发应用程序的方法论、设计模式、实现良好并发应用程序的提示和技巧、测试并发应用程序的工具和方法,以及如何使用面向Java 虚拟机的......一起来看看 《精通Java并发编程(第2版)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具