【问题标题】:Editing Class methods def self.xxx [closed]编辑类方法 def self.xxx [关闭]
【发布时间】:2013-09-13 21:41:23
【问题描述】:

如果我正在编辑 Array 类,我是否必须使用 self 定义每个方法(例如 self.sum)。我不确定为什么这会通过'Test-First' Ruby 轨道的 rpsec 测试,而没有紧跟 def 的 self.method。

class Array

  def sum
    count = 0
    self.each {|x| count += x}
    count
  end

  def square
    self.map {|x| x * x}
  end

  def square!
    self.map! {|x| x * x}
  end
end

【问题讨论】:

  • 什么是 Test-First RSpec 测试?
  • 顺便说一句:你可以写sum更短:def sum; reduce(&:+); end。也不需要self. 之前的mapmap!each
  • 我认为 OP 指的是Learn ruby Test-First course。不过,不知道他试图解决哪一课。

标签: ruby rspec class-method test-first


【解决方案1】:

这些是“实例方法”——它们在Array实例 上运行,而不是Array 类本身。如果您在定义每个方法时将self. 放在每个方法的名称之前,那么您将定义一个“类方法”,这对这些方法没有任何意义。

虽然没有必要,但self. 在从另一个方法的主体中调用这些方法时起作用的原因是self 被定义为那个“实例”观点。这与您定义使用def 的方法形成对比,其中selfArray 类。

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    相关资源
    最近更新 更多