Создание определения досягаемости - PullRequest
0 голосов
/ 28 марта 2011

мое определение досягаемости предполагает проверку массива, чтобы увидеть, может ли он применить каждый к каждому элементу массива, если нет, то предполагается разделить их, чтобы каждый мог быть применен, иначе предполагается просто распечатать массив ... это действительно мой первый раз, когда я использую ruby, поэтому мне нужна помощь ... мой код такой:

class String
 remove_method(:each)
end

class Object
 def reach
  #checking if responds to each and if so prints it out else
  # returns the objects yielded
  if(x.respond_to?(:each))
    self.each {|x| print x, "\n"}
  else
    yield(self)
  self.each {|x| print x, "\n"}
 end

  end


 #test(remove before submitting)
 [4, 13, 18, "fred", "alice"].each { |x| print x, "\n"}
 [4, 13, 18, "fred", "alice"].reach {|x| print x, "\n"}
 [4, [13, 88], [19, "fred", "snark"], "alice"].each { |x| print x, "\n"}
 [4, [13, 88], [19, "fred", "snark"], "alice"].reach { |x| print x, "\n"}

 gets #waits for user to hit enter to exit the program

Я думаю, что моя часть else правильна, но моя часть if - это то, с чем я борюсь ... Я написал код, чтобы проверить, отвечает ли он «каждому», и применяет ли он каждый к каждому элементу массив .. иначе выдает себя и затем применяет каждый к каждому элементу массива ...

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Если я вас правильно понимаю, вы хотите рекурсивно вызывать each (или, во всяком случае, reach) для каждого элемента, который его поддерживает?Попробуйте что-то вроде:

module Enumerable
  def reach &block
    each do |e|
      block.call(e)
      if e.respond_to?(:each)
        e.each(&block) # or, perhaps, e.reach?
      end
    end
  end
end
0 голосов
/ 28 марта 2011

По сути, ваш алгоритм касается всех элементов во вложенном массиве.Для этого вы можете использовать метод flatten.

arr = [4, [13, 88], [19, "fred", "snark"], "alice"]
arr.flatten.each {|it| puts it}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...