热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用operator(*)时如何防止类型推断选择`int`

如何解决《使用operator(*)时如何防止类型推断选择`int`》经验,为你挑选了1个好方法。

我正在尝试定义以下函数(在Seq模块名称中共享空间).

module Seq =

    let scale value sequence = 
        sequence 
        |> Seq.map (fun v -> v * value)

然而,类型推断强加元素和值是类型int.我希望这个方法可以处理整数(8位,16位等),浮点数(单和双)等.

为什么类型推断会跳转到int,以及如何使此函数更通用?



1> Tomas Petric..:

对于正常的函数声明,F#不会让你编写一个数字类型的泛型函数(.NET中的泛型约束不能表达诸如"has*operator"之类的约束)

但是,如果将其标记为F#,将允许您编写通用数值函数inline.在这种情况下,它会在您调用函数时内联函数并将代码专门化为特定类型(类型系统将使用静态成员约束来表达需求).

let inline scale value sequence = 
    sequence 
    |> Seq.map (fun v -> v * value)

您可以在我前一段时间写的博客文章中找到更多信息.


推荐阅读
author-avatar
爱这奋斗
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有