gpt4 book ai didi

ruby - 为什么在 ruby​​ 类中需要 "initialize"?

转载 作者:数据小太阳 更新时间:2023-10-29 08:23:14 24 4
gpt4 key购买 nike

我是 ruby 新手。

我不明白的是,如果某些模式在我的代码中重复出现,我应该可以做些什么来减去那部分并解决问题。

例如,这是现在的样子:

class Book
def initialize(title, author)
@title = title
@author = author
end
def info
puts [@title, @author]
end
end

我希望代码看起来像什么:

class Book(title, author)
def info
puts [title, author]
end
end

我能想到的原因:

  1. 每次创建对象时都会调用初始化。因此,如果每次创建对象时我都想做一些事情,那么初始化是正式方法。

  2. 初始化指示构造函数将采用多少个参数。没有它需要 0。

但我觉得还是没必要。如果我在构建时没有什么特别要执行的,我是否可以将语法更改为看起来像第二种语法,而不是每次创建类时都必须进行初始化?

最佳答案

Struct正是为了这个而存在:

Book = Struct.new(:title, :author)

book = Book.new('Fear & Trembling', 'Søren Kierkegaard')
book.title #=> "Fear & Trembling"
book.author #=> "Søren Kierkegaard"

您可以向 Book 添加新方法,而不是传递一个 block :

Book = Struct.new(:title, :author) do
def info
[title, author]
end
end

book = Book.new('Zur Genealogie der Moral', 'Friedrich Nietzsche')
book.info #=> ["Zur Genealogie der Moral", "Friedrich Nietzsche"]

或通过子类化:

class Book < Struct.new(:title, :author)
def info
[title, author]
end
end

有关使用属性构建类的更多功能,请查看 Virtus .

关于ruby - 为什么在 ruby​​ 类中需要 "initialize"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20136429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com