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 来简化这个例子。

  • 相关阅读:
    html5 canvas 像素随机百分之十显示
    html5 canvas防微博旋转
    html5 canvas 旋转扩大
    html5 canvas 钟表
    html5 canvas 移动小方块
    html5 canvas 鼠标绘制
    html5 拖放到购物车
    html5 拖拽
    js_sl 无缝切换
    HDU 2048 神、上帝以及老天爷( 错排 )
  • 原文地址:https://www.cnblogs.com/greatim/p/4976016.html
Copyright © 2011-2022 走看看