2014-01-31 6 views
0

При воссоздании модуля Enumerable для практики у меня есть #any.Вызов метода внутри метода

def my_any? 
    everything = false 
    self.each do |item| #I switched this `each`. Originally, I had written `my_each` 
     everything = true if yield(item) 
    end 
    everything 
    end 

Теперь, чтобы создать #none? все, что я должен сделать это, не так ли?

def my_none? 
    !(my_any?) 
    end 

Однако, когда я вызываю метод, я получаю сообщение об ошибке:

arr = [1,2,3] 
arr.my_none?{|x| x>2} 
LocalJumpError: no block given (yield) 
+0

я не могу запустить его .. дать полную реализацию –

+0

Изменен его '# each', в отличие от моего собственного метода' # my_each'. Если это не сработает, я отправлю весь код. – funfuntime

+1

Kevin, для 'my_any?', Рассмотрим удаление строк, начинающихся с 'all', и ставим' return true, если yield (item) 'в блоке и' false' между двумя 'end'. Для 'my_none?', Как @Max предлагает или возвращает 'false', если' yield (item) 'в блоке и' true' после. –

ответ

4

Вы используете yield ключевое слово в my_any?, который требует блок. Вы можете захватить блок предоставленного my_none? и передать его:

def my_none? &blk 
    !(my_any? &blk) 
end 
+0

... как я использую ключевое слово 'yield'? – funfuntime

+0

Когда вы выполняете 'yield (item)'. – Max

Смежные вопросы