gpt4 book ai didi

reflection - 如何使用 F# 反射库?

转载 作者:行者123 更新时间:2023-12-03 08:28:43 24 4
gpt4 key购买 nike

我正在尝试遵循此示例(来自 Rob Pickering 的 "Foundations of F#" 书的第 137 页),但我无法使其与最新的 F# CTP 一起使用。

我似乎在第 3 行缺少“值”的定义

Value.GetInfo(x)

这会产生:

error FS0039: The namespace or module 'Value' is not defined.

谁能告诉我这是从哪里来的,或者如果现在以不同的方式完成的话,新的语法是什么? (温柔点——这是我第一次玩 F#)

这是我正在使用的示例:-

#light
open Microsoft.FSharp.Reflection
let printTupleValues x =
match Value.GetInfo(x) with
| TupleValue vals ->
print_string "("
vals
|> List.iteri
(fun i v ->
if i <> List.length vals - 1 then
Printf.printf " %s, " (any_to_string v)
else
print_any v)
print_string " )"
| _ -> print_string "not a tuple"

printTupleValues ("hello world", 1)

最佳答案

为 Beta 1 或 CTP 重写了 F# 反射库。这里是您的代码略有更改以使用新库,并避免使用 F# PlusPack(print_string 用于 OCaml 兼容性)。

open Microsoft.FSharp.Reflection

let printTupleValues x =
if FSharpType.IsTuple( x.GetType() ) then
let s =
FSharpValue.GetTupleFields( x )
|> Array.map (fun a -> a.ToString())
|> Array.reduce (fun a b -> sprintf "%s, %s" a b)
printfn "(%s)" s
else
printfn "not a tuple"

printTupleValues ("hello world", 1)

关于reflection - 如何使用 F# 反射库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1109242/

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