简体   繁体   中英

Using methods defined in a module with class methods in Ruby

I have a small problem that I can't quite get my head around. Since I want to reuse a lot of the methods defined in my Class i decided to put them into an Helper, which I can easily include whenever needed. The basic Class looks like this:

class MyClass
  include Helper::MyHelper
  def self.do_something input
    helper_method(input)
  end
end

And here is the Helper:

  module Helper
    module MyHelper
      def helper_method input
        input.titleize
      end
    end
  end

Right now I can't call "helper_method" from my Class because of what I think is a scope issue? What am I doing wrong?

I guess that is because self pointer inside of do_something input is InternshipInputFormatter , and not the instance of InternshipInputFormatter . so proper alias to call helper_method(input) will be self.helper_method(input) , however you have included the Helper::MyHelper into the InternshipInputFormatter class as an instance methods, not a singleton, so try to extend the class with the instance methods of the module as the signelton methods for the class:

class InternshipInputFormatter
   extend Helper::MyHelper
   def self.do_something input
      helper_method(input)
   end
end 

InternshipInputFormatter.do_something 1
# NoMethodError: undefined method `titleize' for 1:Fixnum

As you can see, the call has stopped the execution inside the helper_method . Please refer to the document to see the detailed difference between include , and extend .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM