У меня есть некоторые проблемы с расширением класса с методом экземпляра после отдельного модуля входят в отдельный классОпределить метод экземпляра класса после класса, уже определенного в рубина
module ActsAsCommentable
def self.included(commentable)
Thread.class_eval do
def commentable
p "disqusable is #{commentable}"
p "disqusable class is #{commentable}"
end
end
end
end
class Thread
#some code...
end
class Asset
include ActsAsCommentable
end
А теперь я хочу, чтобы вызвать этот метод somelike это :
thread = Thread.new
thread.commentable
проблема заключается в том, конечно, что нет привязки с включают метод класса Eval, и я мог бы сохранить переменные, которые я хочу передать в класс Eval в ActsAsCommentable модуле, но я не хочу. Есть ли способ лучше?
Я пытался сделать вместо
module ActsAsCommentable
def self.included(commentable)
class << Thread
define_method :commentable do
p "disqusable is #{commentable}"
p "disqusable class is #{commentable}"
end
end
end
end
Но, как я догадался, это создает метод экземпляра для singletone объекта класса, и поэтому я могу назвать это только через
Thread.commentable
И опять же, не обязательными. ..
Комментарии [Threads] (http://ruby-doc.org/core-2.0/Thread.html)? Что это за безумие? Возможно, вам нужно выбрать более конкретное имя, которое не противоречит механизму параллелизма. –
хорошо это работает с модулями disqus, и есть объект Thread, и поэтому вопрос не в этом). В коде этот модуль вложен в Disqus :: Thread, я просто не хотел бы загрязнять пример. Но вы правы в целом. – sandric
Я знаю, что вопрос не в этом, это именно то, о чем я думал при чтении кода :) –