首页 > 解决方案 > 返回一个所有字符都大写的字符串

问题描述

我正在尝试编写一个函数,该函数使用正向组合返回一个所有字符均为大写的字符串。

这是我没有前向组合的代码:

let toUpper s = String.map System.Char.ToUpper s

这是我使用前向组合的尝试:

let toUpper2 s = s >> Seq.map System.Char.ToUpper >> Seq.map string >> String.concat ""

我让它与管道前锋一起工作,但不能让它与前锋组合一起工作。任何帮助表示赞赏!

标签: .netstringf#

解决方案


这两个是等价的:

let toUpper1   =      Seq.map System.Char.ToUpper >> Seq.map string >> String.concat ""
let toUpper2 s = s |> Seq.map System.Char.ToUpper |> Seq.map string |> String.concat ""

但有一个问题toUpper1。它是通用的,会导致 ML 语言出现问题:

typecheck:值限制。值 'toUpper1' 已被推断为具有泛型类型 val toUpper1 : ('_a -> string) when '_a :> seq 要么使 'toUpper1' 的参数显式,或者,如果你不打算让它是通用的,添加类型注释。

所以它需要一个类型注释:

let toUpper1 : string -> string = Seq.map System.Char.ToUpper >> Seq.map string >> String.concat ""

推荐阅读