,它接受一个元组并返回适当的元组。-6ren">
gpt4 book ai didi

generics - 由于 "ambiguity",F# 通用约束不起作用

转载 作者:行者123 更新时间:2023-12-05 00:51:20 25 4
gpt4 key购买 nike

我有一个应用程序,它呈现钢琴谱,因此我必须将一些乐谱概念抽象成记录结构。为了节省一些输入,我有时会添加成员 FromTuple到某些记录类型。

我还介绍了运营商!> ,它接受一个元组并返回适当的元组。
但是,我确实有以下问题:

FS0332: Could not resolve the ambiguity inherent in the use of the operator 'FromTuple' at or near this program point. Consider using type annotations to resolve the ambiguity.



我找不到我的错误的实际来源(我首先想到可能在多种记录类型中定义/使用了某些记录字段名称,但似乎并非如此)。

类型定义:
type xyz =
{
// some record fields
Field1 : int
Field2 : bool
Field3 : string * string
}
with
static member FromTuple (a, b, c) = { Field1 = a; Field2 = b; Field3 = c }

// more types defined like `xyz`

[<AutoOpen>]
module Globals =
let inline (!>) x = (^b : (static member FromTuple : ^a -> ^b) x)

错误行(在单独的文件中):
//ERROR
let my_xyz : xyz = !> (315, false, ("foo", "bar"))

最佳答案

您的 xyz.FromTuple方法采用三个单独的参数:a: int , b: bool , 和 c: string * string ;相反,您需要它来获取单个 int * bool * (string * string) .通过将参数包装在另一组括号中来执行此操作:

static member FromTuple ((a, b, c)) = { Field1 = a; Field2 = b; Field3 = c }

关于generics - 由于 "ambiguity",F# 通用约束不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44482899/

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