zoukankan      html  css  js  c++  java
  • ruby 中super和super()的区别

    • 不同:super 会自动将子方法的参数传递给父方法,super() 不会
    • 相同:调用父类的同名函数
    # 我们用一个示例来演示下这个机制
    class Parent
      def say(message)
        puts message
      end
    end
    
    class Child < Parent
      def say(message)
        super
      end
     end
    Child.new.say('Hi!')
    # 输出Hi
    如果Parent中的say是一个不带参数的方法,那结果会怎么样 ?
    class Parent
      def say
        puts message
      end
    end
    
    class Child < Parent
      def say(message)
        super
      end
     end
    Child.new.say('Hi!')
    # 运行上面的代码会发现抛出了 ArgumentError (wrong number of arguments (given 1, expected 0)) 异常。
    为了避免这个问题,也为了解决这个问题,我们可以明确的指出 super 不需要把子类中相关的参数传递给父类
    为此,我们需要在 super 后添加一对小括号 () ,即 super() 明确的调用父类而不传递任何参数
     1 class Parent
     2   def say
     3     puts "I'm the parent"
     4   end
     5 end
     6 
     7 class Child < Parent
     8   def say(message)
     9     super()
    10   end
    11  end
    12 Child.new.say('Hi!')
    13 # 输出I'm the parent
     
  • 相关阅读:
    汉诺塔问题
    opencv 增强现实(二):特征点匹配
    opencv 增强现实(一):特征点检测
    opencv 边缘检测原理
    opencv 图片旋转
    opencv 图片位移
    opencv 图片剪切
    opencv 图片缩放
    opencv 仿射变换
    opencv图像融合(大头)
  • 原文地址:https://www.cnblogs.com/ielse/p/14049196.html
Copyright © 2011-2022 走看看