Обработка первых n-файлов в каталоге - PullRequest
2 голосов
/ 24 февраля 2010

У меня есть функция, которая обрабатывает первые N файлов в директории:

def restore(cnt)
  $LOG.debug "store_engine : restore tweets from cache (cnt = #{cnt})"

  result = TweetCollection.new

  Dir["cache/*"].each do |path|
    cnt = cnt - 1
    File.open(path) do |f|
      result.append(Tweet.construct(:friends, :yaml, f.read))
    end
    if cnt == 0
      return result
    end      
  end

  result
end

Мне просто интересно, есть ли более рубиновый метод для написания этой функции?

Ответы [ 3 ]

4 голосов
/ 24 февраля 2010

Slice массив с [] и использование inject для сбора всех Tweet объектов в TweetCollection. Используйте File.read, чтобы вернуть содержимое файла с указанным path в одном вызове метода.

def restore(count)
  @log.debug "store_engine: restore tweets from cache (cnt = #{count})"
  Dir["cache/*"][0...count].inject(TweetCollection.new) do |tweets, path|
    tweets.append Tweet.construct(:friends, :yaml, File.read(path))
    tweets
  end
end

Я также заменил вашу глобальную переменную на переменную экземпляра; Я не знаю контекст вашего метода, поэтому это может быть невозможно.

1 голос
/ 24 февраля 2010

Нарезать :

Dir["cache/*"][0...cnt] do |path|
  ...
end
0 голосов
/ 24 февраля 2010

Другой способ:

Dir["cache/*"].take(cnt)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...