FSharp F#中的字符串编辑问题

时间:2019-01-02 20:25:39

标签: string replace build f#

我对F#语言和功能优先的方法还很陌生,因为我只使用面向对象的语言。

我正在尝试创建一个简单的Word Guesser控制台应用程序。 我正在使用的功能是能够一次猜出多个字符

由于我想采用一种功能性的方法,因此很难拼凑出一种很好的方法来完成此操作,并且最终总是遇到不可变数组等问题。

这是我想出的:

我正在尝试替换/显示给定单词的索引上的字符,这对应于猜测并返回结果字符串

有线索吗?

衷心问候Kalrin

1 个答案:

答案 0 :(得分:2)

易于获得的功能性方法是使用匹配项,但重新生成新的字符串。

您可能还想使用Some / None(如果您查看函数的签名,它会根据您的函数为您提供一个选项字符串,这是一种编写函数的实用方法,但是如果您需要一个空链,您也可以返回一个)。请参阅F#fsharpforfunandprofit.com的圣经

一些评论:

  • .Net中的OOP(例如C#):您将使用Substring方法而不是for循环
  • 请注意,Substirng可以返回异常(如果您将鼠标放在其上,它会在消息框中告诉您),并避免在运行时出现任何问题(因为我们通常不使用F#中的异常-cf Railway fsharpforfunandprofit上编程),则需要进行第二次匹配才能检查长度。

https://fsharpforfunandprofit.com/posts/the-option-type/

let stringContains (word:string) (hidden:string) (guess:string) =
    match word.IndexOf(guess) with
    | -1 -> None
    | ind -> match (hidden.Length < ind) with
                     | true -> Some (guess)
                     | false -> Some (hidden.Substring(0, ind) + guess)