首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >拼音:扩展自我

拼音:扩展自我
EN

Stack Overflow用户
提问于 2009-11-14 11:26:24
回答 5查看 33.6K关注 0票数 115

Ruby语言中,我理解了extend的基本思想。然而,在这段代码中发生了什么?具体地说,extend做了什么?这只是一种将实例方法转换为类方法的便捷方法吗?为什么要这样做,而不是从一开始就指定类方法?

module Rake
  include Test::Unit::Assertions

  def run_tests # etc.
  end

  # what does the next line do?
  extend self
end
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-14 11:57:49

这是一种将实例方法转换为类方法的便捷方法。但您也可以将其用作more efficient singleton

票数 117
EN

Stack Overflow用户

发布于 2009-11-14 11:52:10

在模块中,self本身就是模块类。举个例子

puts self

会返回瑞克所以,

extend self

基本上是让Rake中定义的实例方法对它可用,所以你可以这样做

Rake.run_tests
票数 30
EN

Stack Overflow用户

发布于 2012-07-23 15:10:32

对我来说,将extend看作单例类(也称为元或本征类)中的include总是很有帮助的。

您可能知道在singleton类中定义的方法基本上都是类方法:

module A
  class << self
    def x
      puts 'x'
    end
  end
end

A.x #=> 'x'

现在我们知道了,extendinclude单例类内部模块中的方法,从而将它们公开为类方法:

module A
  class << self
    include A

    def x
      puts 'x'
    end
  end

  def y
    puts 'y'
  end
end

A.x #=> 'x'
A.y #=> 'y'
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1733124

复制
相关文章

相似问题

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