如何在F#中调用bool.TryParse

问题描述 投票:0回答:1

我需要在F#中调用bool.TryParse,并且在使用编译器/ Ionide时遇到了一些困难。

Ex。

let value = true
let parsable = bool.TryParse("True", &value)

我在Ionide中看到的VSCode错误如下所示。

val值:bool全名:值

程序集:example3

类型'ByRefKinds.InOut'与类型'ByRefKinds.In'F#不匹配编译器(1)

这是我在F#中使用ref关键字和语法进行调用的第一个示例,所以我不确定自己做错了什么,byrefs文档似乎对理解这一点没有多大帮助特定情况。

f# pass-by-reference
1个回答
0
投票

事实证明,在我的示例中,我最缺少的是value不可变,因为在这种情况下调用时必须是可变的。

工作示例:

let value = true
let parsable = bool.TryParse("True", &value)

此解决方案是在我阅读了与slightly related GitHub issue相关的Span<T>之后又出现在dotnet fsi中,这至少给了我以下线索。

  let parsable = bool.TryParse("True", &value);;
  -------------------------------------^^^^^^

stdin(34,38): error FS3230: A value defined in a module must be mutable in order to take its address, e.g. 'let mutable x = ...'

但是事实证明,F#在Try-Parse pattern周围似乎也有糖蜜,在进一步研究此示例后,我开始回忆起。这简化为以下调用bool.TryParse的替代解决方案。

let value = true
let (parsable, _) = bool.TryParse "True"

或者,不必绑定parsable并在单个表达式中指定默认值,以下示例可能会更优雅。

let value = match bool.TryParse "True" with
| true, value -> value
| false, _ -> true

也许调用bool.TryParse和其他Try-Parse方法的不同方法各有利弊,但重要的是,我发现一些可行的解决方案,并且由于缺少F#文档,使我摆脱了最初的绊脚石关于这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.