gpt4 book ai didi

Ruby:在 block 中使用 self?

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

简短的问题:当调用对象“a”的方法并将其传递给一个 block 时,我可以从该 block 中访问“a”吗?

示例:假设我有一个数组“words”,我首先想从中删除所有“坏”词(使用函数确定),然后找到剩余词中出现频率最高的词。我可以用两行来完成:

temp_words = words.reject{|w| word_is_bad(w)}
puts temp_words.max{|w| temp_words.count(w)}

但是,我希望避免必须创建一个名为“temp_words”的新变量并在一行中执行所有操作,如下所示:

words.reject{|w| word_is_bad(w)}.max{|w| self.count(w)}

即使我相信我的意图很明确,代码还是失败了,因为“self”不是指调用 reject 后生成的临时数组,而是指程序的主要对象。

最佳答案

如果你想坚持自己的做法,你可以这样写:

words.reject{|w| word_is_bad(w)}.instance_eval{max_by{|w| count(w)}}

但更好更流行的方法是:

words.reject{|w| word_is_bad(w)}.group_by{|w| w}.max_by{|_, a| a.length}.first

关于Ruby:在 block 中使用 self?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24554957/

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