温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ruby编程API阅读之BasicObject阅读

发布时间:2020-07-24 19:29:07 来源:网络 阅读:448 作者:wqyzsh 栏目:编程语言

BasicObject是ruby中所有类的父类。

一、BasicObject提供的实例方法

        BasicObject提供的方法较少,我在文章中只记录一些要点。

        1. == 与eql?同为BasicObject提供的实例方法,但用法上稍有不同。

     1 == 1.0     #=> true
     1.eql? 1.0   #=> false

        2. send方法,下面为send方法的例子。

     class Klass
         def hello(*args)    
             "Hello " + args.join(' ')  
         end
     end
     k = Klass.new
     k.send :hello, "gentle", "readers"   #=> "Hello gentle readers"

          send为ruby中的实例提供了动态调用方法的可能,实在是元编程的利器。

        3. instance_eval && instance_exc

           这两个方法的作用都是将对象的作用域撕开,将方法后所跟的块的self变成对象的上下文环境。所不同的是instance_exc可以向块内传递参数。

二、 BasicObject提供的私有方法

        1. method_missing方法

             method_missing方法被用来处理对象调用方法不存在时的情况,如果在对象类中覆写method_missing,那么可以达到意想不到的效果。使用起来较难。

        2.singleton_method_added方法

            当一个单例方法添加到一个接受者之后,singleton_methdo_added方法会被当作反馈被调用。            

     module Chatty
       def Chatty.singleton_method_added(id)   
           puts "Adding #{id.id2name}"
       end
      def self.one()     
      end
      def two()          
      end
      def Chatty.three() 
      end
     end
     
     ###Adding singleton_method_added
     ##Adding one
     Adding three

      下面还有singleton_method_removed 和 singleton_method_undefined 方法,和本方法用法相同。我们可以通过示例代码体会一下class << self ....  end 的用法。

   module Chatty
     def Chatty.singleton_method_removed(id)    
         puts "Removing #{id.id2name}"
     end
     def self.one()     end
     def two()          end
     def Chatty.three() end
     class << self
        remove_method :three
        remove_method :one
     end
   end


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI