Hacker News new | ask | show | jobs
by psychoslave 1131 days ago
This doesn’t leverage on the more subtle but all the more elegant type system that Ruby provides. As told just above, since all object also have their own class instance you can extend this instance specific class without polluting the general class it derives from.

  irb(main):001:1* module Awesomeness
  irb(main):002:1*   def awesome? = :yes
  irb(main):003:0> end

  => :awesome?
  irb(main):004:0> ?Ô.awesome?
  (irb):4:in `<main>': undefined method `awesome?' for "Ô":String (NoMethodError)
          from /Users/someone/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:11:in `<top (required)>'
          from /Users/someone/.asdf/installs/ruby/3.1.2/bin/irb:25:in `load'
          from /Users/someone/.asdf/installs/ruby/3.1.2/bin/irb:25:in `<main>'

  irb(main):005:0> ?Ô.extend(Awesomeness).awesome?
  => :yes

  irb(main):005:0> ?Ô.awesome?
  (irb):5:in `<main>': undefined method `awesome?' for "Ô":String (NoMethodError)
          from /Users/someone/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:11:in `<top (required)>'
          from /Users/someone/.asdf/installs/ruby/3.1.2/bin/irb:25:in `load'
          from /Users/someone/.asdf/installs/ruby/3.1.2/bin/irb:25:in `<main>'