• inline——F#是如何更接近动态语言的


     看到F#的inline关键字,马上会联想到C++中也有这个。然而因为F#有类型推导的特性,两者结合起来使本来不起眼的关键字变得神通广大。

    因为F#支持泛型,并且有自动泛化的功能,所以很多时候F#用起来跟动态语言很相像。然而也有碰壁的时候,譬如:

        let add a b = a + b
        let f1 = add 1uy
        let f2 = add 1

    代码第一行声明了一个函数,第二行使用byte值为参数调用一次,第三行再使用int值调用,这时候就提示语法错误了。因为第二行代码已经确认了函数使用的是byte类型。这函数也不能强行指定使用泛型,因为(+)不是一个泛型函数(在C#中也同样实现不了这个add泛型函数)。但是,F#中,把函数声明成inline的,问题就解决了:

        let inline add a b = a + b
        let f1 = add 1uy
        let f2 = add 1

    因为是inline,所以每次调用add时,都重新匹配了一次(+)函数。使得两次调用add都是用了不同的(+)函数。现在是不是有点像动态语言了?但是它是有类型检查的哦。

    最后回顾之前泛型特化的一个例子,如果换成inline会让事情变得简单多了。下次,我再来讲解如何用 inline 来简化这个例子。

  • 相关阅读:
    EasyUI tab
    CC和他的AE86
    Spreading the Wealth UVA
    Ultra-QuickSort POJ
    区间完全覆盖问题(贪心)
    Mod Tree HDU
    Snakes and Ladders LightOJ
    There is no SSR CSU
    X问题 HDU
    斐波那契数列
  • 原文地址:https://www.cnblogs.com/greatim/p/4976016.html
Copyright © 2020-2023  润新知