初始化Person
对象的惯用方法是什么?我个人更喜欢person2
但我不熟悉Ruby。
class Person
attr_reader :first, :middle, :last, :phone_number
def initialize(first, middle, last, phone_number)
@first = first
@middle = middle
@last = last
@phone_number = phone_number
end
end
if caller.length == 0
person1 = Person.new("John", "T", "Smith", "555-5555")
person2 = Person.new(
first= "John",
middle= "T",
last= "Smith",
phone_number="555-5555",
)
end
答案 0 :(得分:3)
通常在ruby中,对象可以像person1
一样创建,也可以按以下方式创建:
class Person
attr_reader :first, :middle, :last, :phone_number
def initialize(options)
@first = options[:first]
@middle = options[:middle]
@last = options[:last]
@phone_number = options[:phone_number]
end
end
person = Person.new(first: "John", middle: "T", last: "Smith", phone_number"555-5555")
这种替代方法的好处在于,您可以选择包含任意数量的属性,也可以允许任意排序。
答案 1 :(得分:1)
person1 = Person.new("John", "T", "Smith", "555-5555")
在我看来,这是一个更好的选择。会有一些不同意,但这就是为什么我认为。
首先,您应该编写尽可能可读的代码。这样,人们就不必问很多问题就能理解为什么会按原样编写/构建某些东西。所以,如果你是第二种方式,那么你就会解释。但是,通过第二种方式,它就像是承认阅读你的代码的人没有写出它本来是第一次。您的软件的任何开发人员都知道他们可以查看构造函数参数名称,或者您的IDE已经使用自动文档的形式指定。上述两种表示法的替代方法是在构造函数中初始化人员姓名,如下所示
person1 = Person.new("John Smith")
甚至更好......
person1 = Person.new()
然后根据需要设置字段以解释发生的情况。
person1.address = "Blah street"
person1.phoneNumber = "555-5555"
现在,虽然我完全理解为什么第二个可能看起来更好,但从长远来看它会受到伤害。它在代码中不必要的毛茸茸,可以通过更精简的设计和强大的工具更好地删除。