Почему класс файла Ruby не содержит метода экземпляра размера

#ruby-on-rails #ruby #httpclient

#ruby-on-rails #ruby #httpclient

Вопрос:

Класс 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:

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

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

Комментарии:

1. следовало бы взглянуть на документацию 1.9.2. В любом случае, это отвечает на мой вопрос.