Nano Hash - криптовалюты, майнинг, программирование

Зачем добавлять имя метода Ruby к self?

Просматривая некоторый код Ruby, я заметил методы, объявленные с self. перед именем метода. Например:

def self.someMethod
  //...
end

Что меняет в методе добавление self. к имени метода?

22.11.2011

Ответы:


1

def self.something — это метод класса, вызываемый с помощью:

Class.some_method

def something — это метод экземпляра, вызываемый с помощью:

class = Class.new
class.some_method

Разница в том, что один вызывается для самого класса, а другой — для экземпляра класса.

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

Некоторый пример кода:

class Foo
  def self.a
    "a class method"
  end

  def b
    "an instance method"
  end

  def Foo.c
    "another class method"
  end
end

Foo.a # "a class method"
Foo.b # NoMethodError
Foo.c # "another class method"
bar = Foo.new 
bar.a # NoMethodError
bar.b # "an instance method"
bar.c # NoMethodError
22.11.2011
  • Интересный. self — не первое ключевое слово, которое я бы связал с методом класса. 23.11.2011
  • Вы также можете использовать имя класса, я отредактировал свой ответ, чтобы показать это. 23.11.2011
  • Доступ к статическим переменным осуществляется аналогичным образом? Возможно, так: self.someVariable? 23.11.2011
  • @MrMusic, в рубиновом мире они называются переменными класса, они инициализируются с помощью двойного синтаксиса @@ @@class_variable Я бы рекомендовал создать для них методы получения и установки. Этот ответ может быть полезен. stackoverflow.com/questions/895747/ 23.11.2011
  • Хорошо спасибо. Мне все еще не ясно значение self. при доступе к переменной. 23.11.2011
  • self не связан с методами класса. Он создает метод класса в этом контексте только потому, что self — это класс. 23.11.2011

  • 2

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

    22.11.2011
    Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..