Наследование классов Ruby или какая-то другая проблема

мой рубиновый (на рельсах) класс выглядит так:

класс Foo def self.method1 someAction конец

def self.method2 someAction конец

def someAction // doSmth конец конец

есть идеи, как заставить эту работу или добиться того же поведения другим способом?

Благодарность!

Недостаточная и непонятная информация

Chirantan 17.12.2008 19:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
236
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы не можете вызвать метод экземпляра из метода класса без фактического экземпляра самого класса. Вы можете сделать это так:

class Foo 

    def self.method1 
         myFoo = Foo.new
         myFoo.someAction 
    end

    def someAction 
         //doSmth 
    end 

end

Спасибо за ответ! однако, поскольку someAction скорее является помощником, я не хотел создавать для него новый экземпляр ... и тогда меня осенила крутая идея. я только что определил его рядом с классом :)) ах, глупый я: /

Mantas 17.12.2008 19:55

Не стоит голосовать против, но вы не должны использовать имя класса класса в методе. myFoo = new работать будет.

Chris Lloyd 18.12.2008 02:54
Ответ принят как подходящий

Если some_action подходит как метод класса, я бы сделал это так:

 class Foo
   def self.method1
     some_action
   end
   def self.some_action
     # do stuff
   end
   def some_action
     self.class.some_action
   end
 end

Если method1 должен быть удобным методом, я бы хотел, чтобы Hates_ сказал об этом.

 class Foo
   def self.method1
     self.new.some_action
   end
   def some_action
     # do stuff
   end
 end

Решение для меня обычно заключается в том, является ли some_action больше вспомогательным методом (например, генерация случайного ключа, и в этом случае я бы выбрал первую форму) или это точка входа в что-то более сложное (например, парсер, в котором случае я бы выбрал вторую форму).

Другие вопросы по теме