ruby - 什么时候可以在一个类中同时使用静态方法和实例方法

标签 ruby

这不是 Ruby 特有的,但我现在正好在使用 Ruby。
这是一个提供文本打印功能的类。

class Printer

  # some static methods

  def self.fancy_print(text)
     # do fancy formatting
  end

  def self.print(text)
     fancy_print(text)
  end

  # some instance methods

  def initialize(text)
    @text = text
  end

  def print
    #somehow call fancy_print(@text)
  end
end

在一个类中同时提供实例方法和静态方法是不是糟糕的设计?

有时我想保留多个 Printer 实例。其他时候,我只需要说 Printer.print(text) 就可以获取该文本,而不必费心存储它以备后用,因此会产生一个静态的 print 方法和一个实例 print 方法。

最佳答案

不,这不是糟糕的设计。

这很正常——有些方法是类方法,有些是实例方法。我不确定感知到的问题可能是什么。甚至很难找到只有其中一个或另一个的类,尽管在 Java 中您经常看到静态实用程序类。

编辑 IMO 这个问题具有误导性;您实际上是在问具有相同名称的静态方法和实例方法是否是糟糕的设计

如果两者都是公共(public)的,那就很棘手了,因为如何使用这个类不一定很明显。换句话说,它是设计为通过静态方法还是实例方法使用的?两个都?他们有什么不同?这种差异是否应该……通过名称来区分?

最终这取决于上下文和用法——没有单一的答案。

关于ruby - 什么时候可以在一个类中同时使用静态方法和实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12014272/

相关文章:

php - 将项目从 RoR 迁移到 Symfony - 需要哪些步骤?

ruby - 迭代 Excel 工作簿并对所有内容建立索引?

ruby - 有没有更简洁的方法来编写这种 Ruby 条件语句?

ruby-on-rails - Ruby-如何通过条件最大的多个键检索数组组中的总和

ruby-on-rails - Ruby on Rails 中的垃圾收集器?

c++ - 我是 RUBY 的新手,我需要了解 3 个函数

ruby - 获取 Rails 项目中包含的所有 gem 的变更日志

ruby - 根据 Ruby 中的不同 if 条件打印不同错误消息的更好方法

ruby - 如果类方法被覆盖,则访问类

Ruby 统计 gem