首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby中的实例函数与类函数

Ruby中的实例函数与类函数
EN

Stack Overflow用户
提问于 2015-07-13 19:59:57
回答 1查看 372关注 0票数 2

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

  1. 什么时候应该使用类函数而不是实例函数?
  2. 使用类和实例函数有什么性能好处吗?考虑到所有其他常量,一种比另一种使用更多的资源。
  3. 用self定义类函数,就像用模块的名称定义类函数一样(版本2问题)

版本1:实例函数

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

代码语言:javascript
复制
module Pastries
  def description
    return "I am a pastry!"
  end
end

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

代码语言:javascript
复制
require 'pastries'
include Pastries
puts "With include: #{description}" # With include: I am a pastry!

版本2:类函数

pastries.rb:

代码语言:javascript
复制
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:

代码语言:javascript
复制
require 'pastries'
puts "WITHOUT include: #{Pastries.description}" # WITHOUT include: I am a pastry!

如有任何反馈,将不胜感激。我是一个新手,无论是在堆栈溢出和Ruby,所以纠正张贴风格或其他批评也是受欢迎的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-14 00:02:51

首先,Ruby中的函数称为方法。

在版本1中,您使用的模块具有一个实例方法,该方法可以像上面那样在mixins中使用(即,它被混合到一个类中)。在这里,您将它与main.rb中的顶级对象类混合起来。

在第2版中,您正在使用modules class方法,其中模块充当名称空间,当与其他模块和类一起使用时,可以避免这些方法的名称空间冲突。

针对你的特殊问题:

1.什么时候应该使用类函数而不是实例函数?

当您想提供对模块方法的直接访问时,可以使用模块中的类级方法,而不需要实例化类对象(用于ex )。独立库),或者当您希望在对象的作用域中使用该方法时。

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

2.使用类与实例函数是否有任何性能好处?考虑到所有其他常量,一种比另一种使用更多的资源。

正如在第1和第3节中所解释的,好处取决于所需的使用。对于内存消耗,AFAIK,没有可数的差异。

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

不完全同意。当您用模块的名称定义模块方法时,它总是可以在模块的作用域中访问,而使用self定义的模块方法将从调用它的对象的作用域中访问。有关详细说明,请参见以下答案:name in Ruby

希望这能帮上忙干杯。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31392339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档