Skip to content

Instantly share code, notes, and snippets.

@takatoshiono
Created May 15, 2014 07:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save takatoshiono/3d1116b34a57441ba5a8 to your computer and use it in GitHub Desktop.
Save takatoshiono/3d1116b34a57441ba5a8 to your computer and use it in GitHub Desktop.
モジュールとprivate

モジュールでは private 宣言しても private メソッドにならないけど、class << selfして特異クラスになると private メソッドを定義できるようになる。

$ irb
irb(main):001:0> module Foo
irb(main):002:1>   def self.hello
irb(main):003:2>     puts "Hello"
irb(main):004:2>   end
irb(main):005:1> end
=> :hello
irb(main):006:0> Foo.hello
Hello
=> nil
irb(main):007:0> module Bar
irb(main):008:1>   def self.hello
irb(main):009:2>     konnitiwa
irb(main):010:2>   end
irb(main):011:1>   private
irb(main):012:1>   def self.konnitiwa
irb(main):013:2>     puts "konnnitiwa"
irb(main):014:2>   end
irb(main):015:1> end
=> :konnitiwa
irb(main):016:0> Bar.hello
konnnitiwa
=> nil
irb(main):017:0> Bar.konnitiwa
konnnitiwa
=> nil
irb(main):018:0> module Baz
irb(main):019:1>   def self.hello
irb(main):020:2>     puts "matigaeta"
irb(main):021:2>   end
irb(main):022:1> end
=> :hello
irb(main):023:0> module FooBar
irb(main):024:1>   class << self
irb(main):025:2>     def hello
irb(main):026:3>       konnitiwa
irb(main):027:3>     end
irb(main):028:2>     private
irb(main):029:2>     def konnitiwa
irb(main):030:3>       puts "konnitiwa"
irb(main):031:3>     end
irb(main):032:2>   end
irb(main):033:1> end
=> :konnitiwa
irb(main):034:0> FooBar.hello
konnitiwa
=> nil
irb(main):035:0> FooBar.konnitiwa
NoMethodError: private method `konnitiwa' called for FooBar:Module
        from (irb):35
        from /Users/usr0600268/.rbenv/versions/2.1.1/bin/irb:11:in `<main>'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment