函数返回类型不清楚的问题

2024-04-01

我有以下相当简单的 F# 函数:

let FormatValue (formatProvider : IFormatProvider) valueSuffix value =
    match value > Convert.ToDecimal(valueSuffix.MinimumValueRequired) with
    | true -> let normalizedValue = Convert.ToDecimal(value) / Convert.ToDecimal((Math.Pow(10., Convert.ToDouble(valueSuffix.PowerOfTen)))) in
                  string.Format("{0}{1}", normalizedValue.ToString(valueSuffix.Format, formatProvider), valueSuffix.Text)
    | false -> ""

返回类型被正确推断为string,但是我得到一个错误标记string.Format in the true分支,表示类型<'a> -> string与类型不兼容ValueSuffix。我发现这特别令人惊讶,因为所有其他类型都被正确推断,特别是没有其他发生<'a>在函数中。

我在做什么和/或理解错误?


约翰·帕尔默的答案是正确的,但我经常想知道为什么string.Format is not在 F# 代码中有效,直到这个问题我才懒得去调查它。

看着相关来源 https://github.com/fsharp/fsharp/blob/19507b98bc6a7995e9c19c40f044fdfeb578ef77/src/fsharp/FSharp.Core/prim-types-prelude.fs,我们看到string只是一个类型别名System.String。所以看来我们should能够像使用它一样System.String。例如,假设我们定义以下类型别名:

type foo = System.String

这将使我们能够做类似的事情foo.Format没有问题。

问题在于,不仅是string定义为类型别名,它是还定义了 https://github.com/fsharp/fsharp/blob/19507b98bc6a7995e9c19c40f044fdfeb578ef77/src/fsharp/FSharp.Core/prim-types.fs#L4174作为转换函数。这有效地隐藏了类型别名,除非在仅需要类型名称的上下文中(例如类型注释和强制转换)。

我们可以通过定义我们自己的转换函数来演示这一点foo类型别名:

let foo value = 
    match box value with
    | null -> ""
    | _ -> value.ToString()

现在前面提到的foo.Format调用将无法编译。

所有其他基本类型也是如此(int, float, etc.).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数返回类型不清楚的问题 的相关文章

  • Silverlight 如何确定程序集是“Silverlight”?

    我正在尝试从 F 编译代码以在 Silverlight 中使用 我编译 noframework cliroot C program Files Microsoft Silverlight 2 0 31005 0 standalone 这会生
  • 函数式 GUI 编程可能吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我最近发现了 FP bug 试图学习 Haskell 到目前为止所看到的东西给我留下了深刻的印象 一流的函数 惰性求值和所有其他好处 我还不是专
  • 不可变数据结构性能

    我不明白作为一个集合的东西怎么可能是不可变的并且仍然具有可接受的性能 根据我在 F Sets 中读到的内容 内部使用红黑树作为其实现 如果每次我们想要向红黑树添加新内容时 我们基本上都必须重新创建它 那么它如何才能具有良好的性能呢 我在这里
  • F# 设置带有参数的 SQLCommand 的最佳方法

    我的 F 程序需要与 SQL Server 通信 在一部分中我有这样的事情 let workFlowDetailRuncommand new SqlCommand query econnection workFlowDetailRuncom
  • 定义具有多种消息类型的消息传递域

    到目前为止 我见过的大多数 F 消息传递示例都使用 2 4 种消息类型 并且能够利用模式匹配将每条消息定向到其正确的处理函数 对于我的应用程序 由于处理和所需参数的不同性质 我需要数百种独特的消息类型 到目前为止 每个消息类型都是其自己的记
  • 使用 Akka java API 时 Kotlin 类型推断编译错误

    我想在 Kotlin 程序中使用 Akka java API 当我想设置时onCompleteakka 的回调Future 我遇到了 Kotlin 编译器错误 而 java 等效项工作得很好 val future Future
  • 双前向/后向管道操作符是否有记录?

    我记得读过有关双管道运算符的内容 gt 和 Example let print a b sprintf O O a b 1 2 gt print val it string 1 2 双 向前 向后 管道运算符记录在以下列表中MSDN 上的
  • F# 中序列的递归函数

    这是一个相当微不足道的问题 但快速的谷歌搜索并没有给我答案 为序列编写递归函数的标准方法是什么 对于列表 您可以使用空列表和头 尾模式进行模式匹配 序列的等效项是什么 没有标准的方法可以做到这一点 因为您很少为序列编写递归函数 您应该查看各
  • 在 Blazor 中显示计时器

    我正在尝试在服务器端 Blazor 应用程序中显示倒计时器 我的代码同时使用 F 和 C 语言 该代码在某种程度上可以工作 但计时器永远不会按预期停止 并且计时器显示偶尔不会呈现所有数字 这是我第一次尝试 Blazor 服务器端应用程序 我
  • FParsec:如何组合解析器以便它们以任意顺序匹配

    任务是找到特定的键值对并解析它们 这些对可以按任何顺序出现 我的部分工作尝试 open FParsec type Parser lt a gt Parser lt a unit gt type Status Running Done typ
  • 是 F# 映射上的迭代还是集合中序遍历?

    AFAIK F Map 和 set 被实现为红黑树 所以我猜这些的迭代将是有序遍历 我做了一些测试 迭代结果总是排序的 但我想确定一下 是按顺序遍历吗 MSDN 上的文档非常适合解决这个问题 例如 返回值Set toSeq http msd
  • F# 2010 Seq.generate_using

    Visual Studio 2010 中的 Seq generate using 是否有替代 解决方法 FSharp PowerPack dll 不适用于 2010 AFAIK 很抱歉 2010 年的 PowerPack 尚未上市 我不记得
  • 如何在插件场景中实现程序集绑定重定向?

    我有一个plugin P延伸和application A NET40 我无法控制 P 程序集 NET40 有一个shared dependency D NET35 P和D都依赖于FSharp Core 但版本不同 P是针对FSharp Co
  • 隐式强制转换对委托类型推断的意外影响

    我有一个简单的Money带有隐式转换的类型decimal struct Money decimal innerValue public static implicit operator Money decimal value return
  • ProjectCracker 与 .netstandard 2.0 项目

    我的团队最近从使用 net 框架转向使用 net 标准 2 0 作为我们的 F 库 我们有一些在项目上运行的内部脚本来自动生成 Markdown 文档 这些脚本使用 F 编译器服务 SDK 来分析代码并检索类型元数据 文档注释等 我们正在使
  • 如何在 F# 中将对象转换为泛型类型列表

    在下面的代码片段中 我的目的是将 System Object 可能是 FSharpList 转换为它所持有的任何泛型类型的列表 match o with list lt gt gt addChildList o gt list lt gt
  • 在 IEnumerable 上使用 Seq 函数 [重复]

    这个问题在这里已经有答案了 我正在尝试在 IEnumerable 上应用 Seq 函数 更具体地说 它是System Windows Forms HtmlElementCollection它实现了ICollection and IEnume
  • 通用高阶函数

    当我将泛型函数作为本地值传递时 但在作为参数传递时却不能使用具有不同类型参数的泛型函数时 是否有原因 例如 let f id let g x y f x f y g 1 2 工作正常 但如果我尝试将函数作为参数传递 let g f x y
  • 将 C# 代码转换为 F#(if 语句)

    我想知道如何转换此代码逐行从 C 到 F 我不想使用任何类型的 F 习惯用法或类似的东西 我想了解如何直接映射C 的构造到 F 这是 C 代码 requires l Length gt 0 int GetMinimumValue List
  • Async.StartChild是否存在内存泄漏?

    当我运行以下测试 使用 F 2 0 构建 时 我得到 OutOfMemoryException 在我的系统上大约需要 5 分钟才能达到异常 如果它作为 x86 进程运行 则为 i7 920 6gb ram 但无论如何我们都可以在任务管理器中

随机推荐

  • 从列表创建虚拟变量

    因此 我尝试根据框架的特定列是否包含特定单词来创建虚拟变量以附加到数据框架 该列看起来像这样 dumcol c good night moon good night room good morning room hello moon 我将根
  • 如何更改 Xcode 中文本字段的键盘类型

    我在 XCode 中创建了一个文本字段 而不是 Interface Builder 在 IB 中您可以选择不同的键盘类型 如何在 XCode 中做同样的事情 怎么样keyboardType http developer apple com
  • Asp.NET Web API 中的控制器和类列表

    我想访问我的 Web api 中的所有控制器 假设我有 2 个控制器和 2 个类 Foo string fooId string fooName Bar string barId string barName 样本1控制器 Get int
  • 同时使用 JSON 和 XML 格式的 WCF ResponseFormat?

    例如 当使用 REST 请求对象时 是否可以获取 json 和 xml 格式的响应 或者我是否必须创建类似以下内容的 UriTemplates WebInvoke UriTemplate format json user id Respon
  • 使用 CRTP 实现单例

    看完之后这个答案 https stackoverflow com a 4173298 7151494我尝试过实现一些简单的 CRTP 用法 我想我会尝试实现 Singleton 是的 我知道 这只是为了练习和研究 模式 因为链接的答案kin
  • 来自树形形式的自引用表的分层数据

    看起来在所有简单的情况下都已经询问并回答了这个问题 除了我遇到麻烦的情况之外 我尝试使用递归 CTE 来生成它 但也许光标会更好 或者也许一组递归函数可以解决问题 这可以在 cte 中完成吗 考虑下表 PrimaryKey ParentKe
  • 应用程序通过 Open Graph 发送事件邀请时没有通知

    我的代码看起来像这样 FB api eventId invited users selectedFriends join post message body function response if response response er
  • __import__ 与 imp.load_module

    我在尝试使用 IronPython 安装 autopep8 时遇到错误 ImportError No module named logilab 失败的代码片段是 def load module self fullname self reop
  • django应用程序静态文件在生产中不起作用

    即使对于管理页面 静态文件也无法在生产中运行 我没有添加任何静态文件 我的管理页面样式有问题 我按照以下教程创建了 django 应用程序 https tutorial djangogirls org en https tutorial d
  • isset() 或 !empty() 函数作用于视图中的所有变量?

    你好 我正在使用 CakePHP 我想知道你们是否在视图中的所有变量周围放置了 isset 或 empty 或者我应该依赖数据验证 建议的解决方案是什么 我想你应该知道之间的区别isset and empty并使用满足您需求的那个 empt
  • 如何在 Amazon Linux AMI 上设置 cron 作业

    我正在托管 Tiny Tiny RSS 网站 托管于 亚马逊 Linux AMI 要自动更新 feed 我必须运行以下 Cron 作业 参考http tt rss org redmine projects tt rss wiki Updat
  • Rails 循环遍历表单字段中的数据

    我想在表单中循环访问数据库中的数据 我想对数据做的是将其放入标签和文本框中 我怎样才能在 Rails 中做到这一点 我是否可以使用 each 块在表单内循环遍历它 我将其保存在数据库中的原因是因为我的客户希望能够自己添加表单字段数据 例如
  • 使用三 (3) 个背景图像 css 的按钮

    我正在尝试使用三个背景图像制作一个按钮 以便我们可以提取按钮文本的翻译并很好地扩展 我们可能会为 IE8 添加一个基本样式 但我们的设计师希望我们使用这种样式 而我们无法使用纯 CSS3 很好地重新创建它 Here are the imag
  • Netbeans 7.4 - 排除 LESS 部分源文件编译为 css

    这主要是一个令人讨厌的问题 在我的 css 目录中造成混乱 我想知道在 Netbeans 7 4 或 8 0 beta 中是否有任何方法可以将 LESS 文件标记为在运行 保存时不进行编译 我有一个library less和vars les
  • 装修调度系统

    我想使用多个处理器并行执行线性运算 将复杂的数学函数拟合到某些数据集 假设我的机器有 8 个核心 我想要容纳 1000 个数据集 我期望的是某个系统将 1000 个数据集作为队列 并将它们发送到 8 个核心进行处理 因此它首先将 1000
  • 根据 Python 中的数组值拆分数组

    我有一个像这样的坐标数组 array 1 6 2 6 3 8 4 10 5 6 5 7 18 6 19 5 17 9 10 5 我想将数组拆分为6 and 7 协调 5 7 18 6 因为有一个间隙X那里的价值 我想得到两个单独的数组 ar
  • 通过intent-Android打开地图显示当前位置的方向

    我的 Android 应用程序中有很多纬度经度 我想知道如何通过意图打开选择器或 Google 地图应用程序 并显示从当前位置到该纬度和经度的方向 就像我有 lat 28 605989 lon 77 372970 并且我当前的位置在某个地方
  • 监控 kubernetes 作业

    我的 Kubernetes 作业需要不同的时间才能完成 4 到 8 分钟之间 有什么方法可以让我知道工作何时完成 而不是在最坏的情况下等待 8 分钟 我有一个执行以下操作的测试用例 1 Submits the kubernetes job
  • Google 云端硬盘 + ACTION_GET_CONTENT

    Google 云端硬盘似乎有一个响应 GET CONTENT 操作的活动 但未导出 我可以在应用程序中使用另一种方法从云端硬盘中提取内容 而无需启动该过程from驾驶 自己编写一个选择器 选择器活动并使用后端 API 列出和打开文件显然是一
  • 函数返回类型不清楚的问题

    我有以下相当简单的 F 函数 let FormatValue formatProvider IFormatProvider valueSuffix value match value gt Convert ToDecimal valueSu