简短问题:当调用对象“a”的方法并传递一个块时,我可以从该块中访问“a”吗?
举个例子:假设我有一个数组“word s”,我首先要删除其中所有的“bad”单词(使用函数确定),然后在剩下的单词中找到最常见的单词我可以分为两行:

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 - Ruby:在块中使用self?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24554957/

10-11 21:25