zoukankan      html  css  js  c++  java
  • 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 来简化这个例子。

  • 相关阅读:
    真正的e时代
    在线手册
    UVA 10616 Divisible Group Sums
    UVA 10721 Bar Codes
    UVA 10205 Stack 'em Up
    UVA 10247 Complete Tree Labeling
    UVA 10081 Tight Words
    UVA 11125 Arrange Some Marbles
    UVA 10128 Queue
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/greatim/p/4976016.html
Copyright © 2011-2022 走看看