从 F# 调用 DateTime.TryParse 的正确方法是什么?我正在尝试测试 F# 交互中的一些代码,但我不知道如何通过 ref 将可变的 DateTime 传递给第二个参数。F# 中的 in/out/ref 语法是什么?
这是我正在查看的方法签名:http: //msdn.microsoft.com/en-us/library/ch92fbc1.aspx ?cs-save-lang=1&cs-lang=fsharp#code-snippet-1
从 F# 调用 DateTime.TryParse 的正确方法是什么?我正在尝试测试 F# 交互中的一些代码,但我不知道如何通过 ref 将可变的 DateTime 传递给第二个参数。F# 中的 in/out/ref 语法是什么?
这是我正在查看的方法签名:http: //msdn.microsoft.com/en-us/library/ch92fbc1.aspx ?cs-save-lang=1&cs-lang=fsharp#code-snippet-1
如果你真的需要DateTime
通过引用传递一个可变的,克里斯的回答是正确的。out
但是,在 F# 中使用编译器将尾随参数视为元组返回值的能力更为惯用:
let couldParse, parsedDate = System.DateTime.TryParse("11/27/2012")
这里,第一个值是bool
返回值,而第二个是分配的参数。
以下是在 F# 中执行 DateTime.TryParse 的方法:
let mutable dt2 = System.DateTime.Now
let b2 = System.DateTime.TryParse("12-20-04 12:21:00", &dt2)
操作员在哪里&
找到 dt2 的内存地址以修改引用。
以下是有关 F# 参数语法的一些附加信息。
只是为了完整起见,另一种选择是使用参考单元,例如
let d = ref System.DateTime.MinValue
if (System.DateTime.TryParse("1/1/1", d)) then
// ...
我发现了另一种方式,它似乎更具功能性(来自https://stackoverflow.com/a/4950763/1349649)
match System.DateTime.TryParse "1-1-2011" with
| true, date -> printfn "Success: %A" date
| _ -> printfn "Failed!"
不幸的是,我找不到任何关于它是如何工作的信息。
我有一个我喜欢包含在我所有项目中的辅助模块。我收集这样的东西,将所有命令式 -> 函数式转换放在一个地方以供重用:
module helper =
//if some, unwrap input and call fun
let inline ( |>- ) x f = Option.bind f x //bind f x
//if some, unwrap input, call fun, and wrap output
let inline ( |>-+ ) x f = Option.map f x
module dateTime =
let tryParse (input: string) : DateTime option =
let mutable dt = DateTime.Now
if DateTime.TryParse(input, &dt) then Some dt else None