问题标签 [value-restriction]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
758 浏览

f# - F# 编译器错误 FS0030,值限制问题

我读过StrangeLights的简介,我读过 Expert F# 的文章(第 119 页),但我看不出它们如何应用于我的代码:

对于我的测试,我想检查浮点数之间的相等性,并有一点宽容。我正在将所有内容转换为度量单位,但我希望能够成为“通用”:

然后我可以使用它来检查不同“类型”浮点数的相等性,或者将其咖喱制作一个自定义的:

但我收到以下消息:

我看不出我还能做些什么来使它成为一个函数——我看不到任何隐式参数。

这是怎么回事?

0 投票
3 回答
4141 浏览

f# - 了解 F# 值限制错误

我不明白 F# 中的值限制是如何工作的。我已经阅读了wiki以及MSDN 文档中的解释。我不明白的是:

  1. 为什么,例如,这给了我一个价值限制错误(取自这个问题):

    但是这不是:

    /li>
  2. 这可以概括...

    但这不是(它被指定为 int):

    /li>
  3. 为什么带有隐式参数的函数会产生值限制:

    这:

    与这个:

    (请注意,如果我在代码片段中使用此函数,VR 错误将消失,但随后该函数将指定为我使用它的类型,并且我希望它被概括)

它是如何工作的?

(我使用的是最新的 F#,v1.9.6.16)

0 投票
3 回答
1508 浏览

generics - 保持部分应用函数通用

是否可以部分应用一个功能,例如bprintf并防止它根据其初始用途受到限制?

我想做以下事情:

0 投票
1 回答
1766 浏览

f# - F# 值限制

我已经阅读了有关 F# 中值限制的所有内容,但我仍然不明白。我有以下代码:

并且编译器显示错误:

谁能帮我?非常感谢你;)

0 投票
3 回答
189 浏览

generics - 如何使我的功能通用

我似乎找不到使 csvList 或其部分应用的助手 listIntoJsonArray 或 listIntoJsonObject 通用的魔法酱。

谢谢您的帮助。

0 投票
2 回答
341 浏览

f# - 摆脱价值限制错误

在 OCaml 中

在 F# 中

我应该怎么做才能将空列表作为参数传递而不触发值限制错误?

0 投票
2 回答
271 浏览

f# - 又一个价值限制问题

在下面的代码Seq.generateUnique中被限制为 type ((Assembly -> seq<Assembly>) -> seq<Assembly> -> seq<Assembly>)

我希望它是通用的,但是将其放入文件中而不是使用它会产生值限制错误:

价值限制。值 'generateUnique' 已被推断为具有通用类型 val generateUnique : (('_a -> '_b) -> '_c -> seq<'_a>) 当 '_b :> seq<'_a> 和 '_c : > seq<'_a> 要么显式地设置 'generateUnique' 的参数,或者,如果你不打算让它是通用的,添加一个类型注解。

添加显式类型参数 ( let generateUnique<'T> = ...) 可消除错误,但现在它返回不同的结果。

没有类型参数的输出(期望/正确的行为):

与:

为什么行为会改变?我怎样才能使函数通用实现所需的行为?

0 投票
2 回答
436 浏览

f# - 如何在 F# 中声明泛型参数?

给定以下代码:

最后一行给出了错误:This expression was expected to have type int but here has type string

我认为以下可能有效,但它没有:

我的问题是,如何定义 NotWorking 函数以使 display 参数在函数中保持通用?

0 投票
1 回答
2833 浏览

list - 空列表中的 F# 值限制

我有一个 F# 函数:

它删除列表中偶数索引处的所有元素。如果我给列表一些输入,它会起作用,就像removeEven ['1';'2';'3']我得到['1';'3']的那样。但是当我插入一个空列表作为参数时,我得到了这个错误:

stdin(78,1):错误 FS0030:值限制。值“it”已被推断为具有泛型类型

val it : '_a list 将 'it' 定义为一个简单的数据项,使其成为具有显式参数的函数,或者,如果您不希望它是通用的,则添加一个类型注释。

帮忙,有人吗?

0 投票
3 回答
217 浏览

f# - 没有泛型参数时的值限制

let makeElem我在以下代码中得到值限制错误:

elemCreator如果从返回的匿名函数没有任何泛型参数,为什么会出现值限制错误?

编译器声明 makeElem 的推断类型是(string -> 'a -> XmlNode). 但是为什么它推断出第二个参数就像'a我已经声明它一样obj