gpt4 book ai didi

Ruby - 初始化后立即修改Struct属性

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

假设我有:

Book = Struct.new(:title, :content)
book = Book.new('harry potter', 'a bunch of content here')
p book.title #=> harry potter

最后一行我要制作的是《哈利·波特》。我知道我可以做类似的事情:

Book = Struct.new(:title, :content) do
def capitalized_title
self.title.gsub(/\S+/, &:capitalize)
end
end

然后调用 capitalized_title,但我想要的是不必创建单独的方法,而是有一些方法,当您将“title”分配给新的 Book 对象时,标题会立即大写。我猜是某种钩子(Hook)方法。

最佳答案

class Book < Struct.new(:title, :content)
def title
super.gsub(/\S+/, &:capitalize)
end
end

book = Book.new('harry potter', 'a bunch of content here')
book.title # => "Harry Potter"

Book = Struct.new(:title, :content) do
alias orig_title title
def title
orig_title.gsub(/\S+/, &:capitalize)
end
end

为了防止title每次都被调用,覆盖title=:

Book = Struct.new(:title, :content) do
alias orig_title= title=
def initialize(*args)
super
self.title = title
end
def title= value
self.orig_title = value.gsub(/\S+/, &:capitalize)
end
end

关于Ruby - 初始化后立即修改Struct属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25959775/

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