Defining class methods with Modularity traits

Updated . Posted . Visible to the public. Repeats.

There are two ways to define a class method from a Modularity Show archive.org snapshot trait. Note that the usual caveats regarding class method visibility apply.

Using define_method

The recommended way is to define a method on your module's singleton class:

module SomeTrait
  as_trait do
    define_singleton_method :foo do
      # ...
    end
  end
end

Using def (has caveats!)

Alternatively, you can def the method on self:

module SomeTrait
  as_trait do
    def self.foo
      # ...
    end
  end
end

This is quite concise and results in faster methods than using define_method. However, you cannot use it with parametrized traits.

The following will fail:

module SomeTrait
  as_trait do |name|
    def self.foo
      puts name # will raise an error because the variable 'name' is not bound to the method body
    end
  end
end
Henning Koch
Last edit
Henning Koch
Keywords
static, method
License
Source code in this card is licensed under the MIT License.
Posted by Henning Koch to makandra dev (2011-03-08 18:48)