gpt4 book ai didi

F# 动态选项

转载 作者:行者123 更新时间:2023-12-04 23:51:24 24 4
gpt4 key购买 nike

我需要指定,我的成员属性将在 C# 中返回类似于 dynamic? 的内容。可以在 F# 中使用动态数据类型吗?

type Data =
| Text of string
| Number of string
| Date of string
with

member x.Value
with get() : dynamic option =
match x with
| Text(value) ->
if value.Length > 0 then Some(value) else None
| Number(value) ->
let (success, number) = Decimal.TryParse value
if (success) then Some(number) else None
| Date(value) ->
let (success, date) = DateTime.TryParse value
if (success) then Some(date) else None

此代码无法编译,因为返回类型由文本大小写确定为字符串选项。关键字 dynamic 在 F# 中未知。有什么想法吗?

最佳答案

尝试制作这个数据类型:

类型 ThreeWay = S of string |十进制的 N | DateTime 的 D

或者,使用 System.Object 类型:

open System
type Data =
| Text of string
| Number of string
| Date of string
with

member x.Value
with get() : Object option =
match x with
| Text(value) ->
if value.Length > 0 then Some(value :> Object) else None
| Number(value) ->
let (success, number) = Decimal.TryParse value
if (success) then Some(number :> Object) else None
| Date(value) ->
let (success, date) = DateTime.TryParse value
if (success) then Some(date :> Object) else None

获取值:

let d = Number("123")
let v = d.Value
match v with
| Some(x) -> x :?> Decimal // <-- TYPE CAST HERE

关于F# 动态选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4005769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com