Передать блок делегированному методу << Array в Ruby - PullRequest
3 голосов
/ 27 августа 2010

Я создал делегированный класс Array следующим образом:

class LeadPartArray < DelegateClass(Array)

  def <<(part, &block)
    super(part) unless @arr.select{|p| p.text == part.text}.size > 0
  end

  def initialize(arr = [])
    @arr = arr
    super(@arr) 
  end

end

Я переопределяю метод << и хочу передать блок, который я могу использовать в качестве предиката. </p>

У меня есть следующий тест, который даже не является допустимым синтаксисом Ruby:

  def test_should_pass_predicates_to_add
    arr = LeadPartArray.new([])
    part = LeadCapturer::LeadPart.new("text", LeadCapturer::TextTag.new, 2)
    predicate = Proc.new{|part| part.text.size < 4}
    arr <<(part, &predicate)
    assert_equal(0, arr.size)
  end

Можно ли передать блок << и, если да, может ли кто-нибудь указать мне правильный путь?1009 *

1 Ответ

1 голос
/ 27 августа 2010

Вы можете сделать это, используя синтаксис вызова метода:

arr.<<(part, &predicate)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...