首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Ruby中,有没有重载初始化构造函数的方法?

在Ruby中,有没有重载初始化构造函数的方法?
EN

Stack Overflow用户
提问于 2010-10-18 19:38:56
回答 5查看 45.7K关注 0票数 82

在Java中,您可以重载构造函数:

代码语言:javascript
复制
public Person(String name) {
  this.name = name;
}
public Person(String firstName, String lastName) {
   this(firstName + " " + lastName);
}

在Ruby中有没有一种方法可以达到同样的结果:两个接受不同参数的构造函数?

EN

回答 5

Stack Overflow用户

发布于 2010-10-19 06:24:19

我倾向于这样做

代码语言:javascript
复制
class Person
  def self.new_using_both_names(first_name, last_name)
    self.new([first_name, last_name].join(" "))
  end

  def self.new_using_single_name(single_name)
    self.new(single_name)
  end

  def initialize(name)
    @name = name
  end
end

但我不知道这是不是最好的方法。

票数 31
EN

Stack Overflow用户

发布于 2010-10-18 19:42:22

代码语言:javascript
复制
class Person
  def initialize(name, lastName = nil)
    name = name + " " + lastName unless lastName.nil?
    @name = name
  end
end
票数 4
EN

Stack Overflow用户

发布于 2016-01-05 11:33:18

代码语言:javascript
复制
class StatementItem
  attr_reader :category, :id, :time, :amount

  def initialize(item)
    case item
    when Order
      initialize_with_order(item)
    when Transaction
      initialize_with_transaction(item)
    end
  end

  def valid?
    !(@category && @id && @time && @amount).nil?
  end

  private
    def initialize_with_order(order)
      return nil if order.status != 'completed'
      @category = 'order'
      @id = order.id
      @time = order.updated_at
      @amount = order.price
    end

    def initialize_with_transaction(transaction)
      @category = transaction.category
      @id = transaction.id
      @time = transaction.updated_at
      @amount = transaction.amount
    end

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

https://stackoverflow.com/questions/3958735

复制
相关文章

相似问题

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