Как присвоить значения методам, которые включены в класс через модуль? - PullRequest
1 голос
/ 10 июня 2019
module MyModule
   def method1
     @my_value
   end

   def method2
     "#{method1} is another method"
   end
end

class MyClass
    include MyModule
    @my_value = 'Method1' 
end

puts MyClass.new().method2
>>   is another method

Как я могу получить значение, присвоенное моим методам, которые я включил в свой класс?Как видите, @my_value равно nil.

1 Ответ

1 голос
/ 11 июня 2019
module MyModule
  def set_my_value(val)
    define_method :my_value do
      val
    end
  end

  def method1
    my_value
  end

  def method2
    "#{method1} is another method"
  end
end

class MyClass
  include MyModule
  extend MyModule
  @my_value = 'Method1'
  set_my_value 'Method1'
end

вы можете сделать это так, rails интенсивно использует этот способ, и когда вы включаете модуль в класс, он становится родителем в иерархии наследования этого класса, поэтому вы не можете получить доступ к его переменной экземпляра напрямуюкак вы (в теле класса) для доступа к нему, вам нужно сделать из внутреннего метода

module MyModule
  def method1
    @my_value
  end

  def method2
    "#{method1} is another method"
  end
end

class MyClass
  include MyModule
  def initialize
    @my_value = 'Method1'
  end
end

puts MyClass.new().method2  

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

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