zoukankan      html  css  js  c++  java
  • ruby函数回调的实现方法

    以前一直困惑ruby不像python,c可以将函数随意传递,然后在需要的时候才去执行。其实本质原因是ruby的函数不是对象。

    通过查阅资料发现可以使用如下方法:

    def func(a, b)
      puts a + b
    end
    
    f = method(:func)
    f.call(1, 2)

    上面是使用Method对象封装函数,然后就可以通过操作该Method对象实现函数的参数传递。

    曾经一度认为上面方法才是将函数作为参数使用的正统方法,后来才发现原来是我太执着于c的函数指针的使用模式里,而没有真正体会到ruby block的精髓,使用block的实现方法:

    def func(a, b)
      puts a + b
    end
    
    def use_func(a, b)
      yield a, b
    end
    
    use_func(1, 2) do |a, b|
      func a, b
    end

    说明一下用意:

    将函数作为参数传递给其他对象,其实根本目的是让其他对象可以使用该函数,使用方法就如同use_func的实现,这时关心的内容其实仅仅是参数列表和返回值,也就是说我们可以使用block将func的“形”传递给use_func,而在真正需要使用func的时候再在block中执行func即可。

    当然,举例的func实现过于简单,大家可能觉得只需要将puts语句放在block中即可,但是当实现内容增多或者需要重用时,func还是有存在的必要。

  • 相关阅读:
    DcotrineFixtureBundle学习
    php方法(1)
    学习笔记(2)
    微信access_token的获取
    学习笔记(1)
    与你相遇——博客园
    单例模式
    Java集合
    sql 优化
    缓存与数据库的数据一致性的解决方案(转)
  • 原文地址:https://www.cnblogs.com/sizzle/p/5134467.html
Copyright © 2011-2022 走看看