gpt4 book ai didi

ruby - self = Ruby 的后代?

转载 作者:太空宇宙 更新时间:2023-11-03 18:02:11 25 4
gpt4 key购买 nike

我有一个游戏的文本日志,其中包含(例如)两种类型的条目,即。聊天和事件。在大多数情况下,它们非常相似,所以我定义了一个 LogEntry 类;

class LogEntry < Array
def initialize(str)
super str.split
end

def parse
LogEntry.parse self
end

def LogEntry.parse(entry)
# Processes the elements that are in any Entry
# Figure out whether it's a Chat entry or an Event entry
# Returns an object of type LogChat or LogEvent
end
end

LogChat 和 LogEvent 都扩展了 LogEntry 并进行与其领域相关的进一步处理。一切都按预期进行;

chat = LogEntry.new("some chat")
event = LogEntry.new("some event")

chat.parse.class # => LogChat
event.parse.class # => LogEvent

问题:类方法 LogEntry.parse 本质上返回适当类的已解析条目。在这种情况下,解析的条目是重要的一点。但是我们可以将实例方法“parse”重命名为“what_type_should_i_be?”。我希望对象根据该信息和“self.become LogEntry.parse(self)”采取行动

现在,要解析一个条目,我必须这样做;

  entry = entry.parse

我想进一步插入它,以便得到相同的结果;

  entry.parse

我已经尝试过了;

class LogEntry
def parse
self = LogEntry.parse(self)
end
end

但我收到错误 Can't change the value of self。有谁知道我应该如何实现这一目标?

编辑:我更改了我的示例,因为许多答案都集中在许多条目的迭代上。 Chuck 的回答优雅地表明这种情况不是问题。

如果这引起任何人的兴趣,我偶然发现了 Evil Ruby这让你插手 `self.class'。有一篇关于它的不错的 Orielly 文章 Ruby code that will swallow your soul!我正在研究它,看看它是否提供任何答案。 (编辑:evil.rb 的名字很好!低级别的东西“似乎”不适合稳定/长期分发。)

最佳答案

我认为最根本的问题是 each 在这里是错误的方法。要么让 parse 更改对象的内部状态而不是对象本身,要么使用 map! 将集合中的对象替换为新版本。

entries.map! {|entry| entry.parse}

将使用对它们调用 parse 的结果更新数组中的对象,因此没有理由在 parse< 中对 self 做奇怪的事情 方法。

关于ruby - self = Ruby 的后代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1709570/

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