• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Ruby中使用Block、Proc、lambda实现闭包

    闭包(Closure),是指未绑定到任何对象的自由代码,闭包中的代码与任何对象和全局变量无关,只与执行此段代码的上下文相关。

    今天我们简要的看一下ruby中的闭包实现。

    Ruby中的闭包实现有:Block,Proc,Lambada。

    首先,我们来看Block。

    复制代码 代码如下:

    ary = [1,2,3,4]

    ary.collect! do |a|

            a*a

    end

    ary.each do |a|

            puts a

    end

    这段代码,我们使用了Array对象的block方法,将ary中的每个元素平方一把。从例子中我们可以看到block使用起来很方便,想必传统的Java以及C编码,省略掉了冗余的循环,让你更加专注业务代码,这也是ruby的好处之一。

    使用block的最大好处就是可以省略重复的冗余的无用的代码,我们再来看一个读文件的例子:

    复制代码 代码如下:

    #file block

    File.open(__FILE__) do |f|

    puts f.readlines

    end

    对比我们用Java代码来读文件,每次都很反感那个冗长的try-catch-finally。从上面的ruby代码中我么可以看到,ruby语言给你做了处理,通过block你可以不用写无用的系统代码了。

    从上面的例子我们可以看到,Ruby中的Block对开发者来说,不用再写那些冗余无用的系统代码,而是更加专注业务代码,提升开发效率。

    其次,我们再看Proc。

    如果你经常使用Block,你会发现一个问题:代码中会有很多重复的Block,比如好多地方需要打印文件内容。怎么解决呢?你第一个想到的是写一个公共函数,不错,可以解决。但是记住你使用的是ruby语言,不要重新造轮子。Ruby提供了函数化的Block:Proc。

    我们看一个简单的Proc例子:

    复制代码 代码如下:

    #file block with Proc

    p = Proc.new{|f| puts f.readlines}

    File.open(__FILE__, p)

    上面例子可以看到,将Block代码定义为一个Proc对象,然后在使用Block的地方用Proc替换,这样就做到了完美的代码复用。

    最后我们看看lambda。

    Lambda是一种表达式的名称,ruby中可以通过lambda表达式创建Proc对象。我们先看例子:

    复制代码 代码如下:

    #file block with Proc created with lambda

    new_p = lambda{|f| puts f.readlines}

    File.open(__FILE__, new_p)

    上面例子中,我们使用系统的lambda方法创建了一个Proc对象,其效果与Proc.new创建出来的是一样的。其实使用lambda与使用Proc.new效果是一样的,只不过lambda是一种标准的方法,其他语言如Python也支持,因此ruby中也支持了。

    您可能感兴趣的文章:
    • 如何利用Ruby简单模拟Lambda演算详解
    上一篇:在阿里云 (aliyun) 服务器上搭建Ruby On Rails环境
    下一篇:Ruby中的反射(Reflection)应用实例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Ruby中使用Block、Proc、lambda实现闭包 Ruby,中,使用,Block,Proc,lambda,