OCaml中的空字符

Lil*_*a 5 2 ocaml

我想做一些相当简单的事情.我想取一个字符串,如"1000",并返回字符串"1000".

这是我的尝试:

String.map (function x -> if x = ',' then '' else x) "1,000";; 
Run Code Online (Sandbox Code Playgroud)

但是我收到一个编译错误,说有一个语法错误wrt ''

感谢您的见解!

Jef*_*eld 5

不幸的是,没有像你正在寻找的那样的角色.有一个长度为0个字符的字符串(""),但没有任何字符根本不存在.所有字符(可以这么说)都是1个字符.

要解决您的问题,您需要一个更通用的操作String.map.地图的本质是它的输入和输出具有相同的形状但内容不同.对于字符串,这意味着输入和输出是相同长度的字符串.

除非你真的想要避免命令式编码(这实际上是一个很好的避免,特别是在开始使用OCaml时),你可能最好使用String.iter和缓冲区(来自Buffer模块).

更新

string_map_partialAndreas Rossberg给出的功能相当不错.这是另一个使用String.iter和缓冲区的实现:

let string_map_partial f s =
    let b = Buffer.create (String.length s) in
    let addperhaps c =
        match f c with
        | None -> ()
        | Some c' -> Buffer.add_char b c'
    in
    String.iter addperhaps s;
    Buffer.contents b
Run Code Online (Sandbox Code Playgroud)

只是一个具有不同风格权衡的替代实现.不快,也可能不慢.它仍然是必要的(出于同样的原因).