Почему класс Ruby File не содержит метод экземпляра размера - PullRequest
3 голосов
/ 07 октября 2011

Класс File имеет метод класса с именем size, который принимает путь и возвращает размер файла, на который указывает путь. Что может быть причиной отсутствия метода экземпляра с именем size в файле.

Вот почему это важно для меня.

Я использую гем httpclient. Я использую это, чтобы загрузить файл на сервер. Например, я бы использовал следующий оператор для загрузки файла на сервер, используя httpclient

file=File.open("foo.txt")
HttpClient.new.put("/upload", file)

Если я не добавляю метод экземпляра размера в класс File, он жалуется, поэтому я пошел дальше и обезьяна исправила его следующим образом:

 class File
   def size
       @file_size ||= File.size(self.path)
   end
 end

Это работает, но мне интересно, есть ли причина, по которой метод size не был добавлен как метод экземпляра, и есть ли лучший способ сделать то, что я сделал.

1 Ответ

8 голосов
/ 07 октября 2011

Этот метод присутствует в 1.9.2 как задокументировано , поэтому вы можете не добавлять этот патч, если метод уже определен.

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

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