Sunday, June 30, 2013

Ruby Include and Extend

module Base
  def print
    p 'base'
  end
end

class A
  # add method for instance
  include Base
end

A.new.print


class B
  # add method for class
  extend Base
end

B.print

class C
  # include module for singleton
  # the same like extend
  class << self
    include Base
  end
end

C.print
include work the same as inheritance but its not the same:
  1. class have only one parent
  2. include extend only instance
# check include
A.new.kind_of? Base #=> true

# check extend
B.kind_of? Base #=> true



Saturday, June 29, 2013

Highlighting code

<!-- Syntax Highlighter Additions START -->

<link href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" rel="stylesheet" type="text/css" />

<link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeEmacs.css" rel="stylesheet" type="text/css" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript" />



<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushAS3.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushColdFusion.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDelphi.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDiff.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushErlang.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushGroovy.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJavaFX.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPowerShell.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushScala.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js" type="text/javascript" />

 

<script language="javascript" type="text/javascript">

 SyntaxHighlighter.config.bloggerMode = true;

 SyntaxHighlighter.all();

</script>

<!-- Syntax Highlighter Additions END -->
In post we write something like that:
<pre class="brush:ruby">
... code
</pre>

Vim




Ruby singleton

# All is Object
# =============
#
# print - is singleton method for instance

instance = Document.new
def instance.print
end

class << instance
  def print; end
end

# print - is singleton method for Document
# Document - is instance too of Class object

def Document.pring
end

class Document
  class << self
    def print; end
  end
end



Ruby class variables

# B class redefine class variable

class A
  @@class_var = 'first'

  def first
    @@class_var
  end
end

class B < A
  @@class_var = 'second'

  def second
    @@class_var
  end
end

p B.new.first           # => second
p B.new.second          # => second
p B.singleton_methods   # => []


# A and B class have different variable
# In this case we have instance(singleton) variable for A and B

class A
  @class_var = 'first'

  class << self
    attr_accessor :class_var
  end

  def first
    A.class_var
  end
end

class B < A
  @class_var = 'second'

  class << self
    attr_accessor :class_var
  end

  def second
    B.class_var
  end
end

p B.new.first           # => first
p B.new.second          # => second
p B.singleton_methods   # => [:class_var, :class_var=]

 
 
Blogger Templates