实例函数与Ruby中的类函数

时间:2015-07-13 19:59:58

标签: ruby include require

我有两个版本的简单程序可以完成同样的事情。我有一些问题。

  1. 我应该何时在实例函数上使用类函数?
  2. 使用类和实例函数是否有任何性能优势?鉴于其他一切不变,是否会使用比其他资源更多的资源。
  3. 使用self定义类函数与使用模块名称定义类函数(版本2问题)
  4. 版本1:实例函数

    我有一个名为pastries.rb的文件,其中包含:

    module Pastries
      def description
        return "I am a pastry!"
      end
    end
    

    然后在另一个名为main.rb的文件中,我有:

    require 'pastries'
    include Pastries
    puts "With include: #{description}" # With include: I am a pastry!
    

    第2版:课程功能

    pastries.rb:

    module Pastries
      # Are the following equivalent?
    
      # def self.info 
      #   return "I am a pastry!"
      # end
    
      def Pastries.description
        return "I am a pastry!"
      end
    end
    

    main.rb的:

    require 'pastries'
    puts "WITHOUT include: #{Pastries.description}" # WITHOUT include: I am a pastry!
    

    感谢任何反馈。我是stackoverflow和Ruby的新手,所以也欢迎更正发布风格或其他批评。

1 个答案:

答案 0 :(得分:-1)

首先,Ruby中的函数称为Methods。

在版本1中,您正在使用具有实例方法的模块,该方法可以在mixins中使用(即,它被混合到类中),如上所述。在这里,您将它与main.rb中的顶级对象类混合。

在版本2中,您正在使用具有类方法的模块,其中模块充当命名空间,以避免在与其他模块和类一起使用时这些方法的命名空间冲突。

针对您的具体问题:

1。什么时候应该在实例函数上使用类函数?

当您希望提供对模块方法的直接访问而无需实例化类对象(例如,独立库)或希望在以下方法中使用该方法时,可以使用模块中的类级方法混合的对象的范围。

当您想要通过混合的类对象调用模块的方法时,应该使用实例方法(例如,为类提供附加功能并为类似于多个的类提供机制继承)

2。使用类和实例函数有任何性能优势吗?鉴于其他一切不变,是否会使用比其他资源更多的资源。

如1和3中所述,优点取决于所需的用途。对于内存消耗,AFAIK,没有可数差异。

3。使用self定义类函数与使用模块名称定义类函数(版本2问题)

不完全是。当您使用模块名称定义模块方法时,它始终可以在模块的范围内访问,而使用self定义的模块方法将在对象的范围内被访问。调用。有关详细说明,请参阅以下答案:Trying to understand use of self.method_name vs. Classname.method_name in Ruby

希望这有帮助,干杯。