Module¶
Rice::Module wraps Ruby's Module class and provides methods for defining modules and their methods. It inherits from Object.
Constructors¶
Module()¶
Construct a Module wrapping rb_cObject.
Module(VALUE v)¶
Wrap an existing Ruby module VALUE.
Parameters:
v- A Ruby VALUE of typeT_MODULE.
Module(std::string name, Object under = rb_cObject)¶
Get or create a module by name.
Parameters:
name- The module name.under- The parent module (default: Object).
Free Functions¶
define_module(char const* name) → Module¶
Define a new module in the global namespace.
Parameters:
name- The module name.
Returns:
The new or existing Module.
define_module_under(Object parent, char const* name) → Module¶
Define a new module under a parent module or class.
Parameters:
parent- The parent module or class.name- The module name.
Returns:
The new or existing Module.
Module rb_mOuter = define_module("Outer");
Module rb_mInner = define_module_under(rb_mOuter, "Inner");
// Creates Outer::Inner
anonymous_module() → Module¶
Create a new anonymous module.
Returns:
A new anonymous Module.
Public Methods¶
name() const → String¶
Get the module's name.
Returns:
The module name as a String.
ancestors() const → Array¶
Get the module's ancestors.
Returns:
An Array of ancestor modules/classes.
singleton_class() const → Class¶
Get the module's singleton class.
Returns:
The singleton Class.
module_eval(String const& s) → Object¶
Evaluate Ruby code in the context of the module.
Parameters:
s- A string containing Ruby code.
Returns:
The result of the evaluation.
include_module(Module const& inc) → auto&¶
Include another module.
Parameters:
inc- The module to include.
Returns:
Reference to self for method chaining.
Module enumerable(rb_mEnumerable);
Module m = define_module("MyModule")
.include_module(enumerable);
Defining Methods¶
define_method(name, method, args...) → auto&¶
Define an instance method on the module.
Parameters:
name- The method name.method- A function pointer, member function pointer, or lambda.args...- OptionalArgobjects for default parameters.
Returns:
Reference to self for method chaining.
Description:
For plain functions or lambdas, the first parameter receives self (either as VALUE or as the C++ type).
Module m = define_module("MyModule")
.define_method("greet", [](Object self, std::string name) {
return "Hello, " + name + "!";
});
define_function(name, func, args...) → auto&¶
Define an instance method without a self parameter.
Parameters:
name- The method name.func- A function pointer or lambda (no self parameter).args...- OptionalArgobjects for default parameters.
Returns:
Reference to self for method chaining.
int add(int a, int b) { return a + b; }
Module m = define_module("MyModule")
.define_function("add", &add);
define_singleton_method(name, method, args...) → auto&¶
Define a singleton (class-level) method.
Parameters:
name- The method name.method- A function pointer or lambda (first parameter is self).args...- OptionalArgobjects.
Returns:
Reference to self for method chaining.
Module m = define_module("MyModule")
.define_singleton_method("version", [](Object self) {
return "1.0.0";
});
// Ruby: MyModule.version #=> "1.0.0"
define_singleton_function(name, func, args...) → auto&¶
Define a singleton method without a self parameter.
Parameters:
name- The method name.func- A function pointer or lambda.args...- OptionalArgobjects.
Returns:
Reference to self for method chaining.
Module m = define_module("MyModule")
.define_singleton_function("pi", []() {
return 3.14159;
});
// Ruby: MyModule.pi #=> 3.14159
define_module_function(name, func, args...) → auto&¶
Define a module function (accessible as both singleton and instance method).
Parameters:
name- The method name.func- A function pointer or lambda.args...- OptionalArgobjects.
Returns:
Reference to self for method chaining.
Note:
Only valid for modules (raises exception if called on a class).
Module m = define_module("MyModule")
.define_module_function("helper", []() {
return "helping";
});
// Ruby:
// MyModule.helper #=> "helping"
// include MyModule
// helper #=> "helping"
define_constant(name, value) → auto&¶
Define a constant in the module.
Parameters:
name- The constant name.value- The constant value (automatically converted to Ruby).
Returns:
Reference to self for method chaining.
Module m = define_module("MyModule")
.define_constant("VERSION", "1.0.0")
.define_constant("MAX_SIZE", 1024);
// Ruby: MyModule::VERSION #=> "1.0.0"
// Ruby: MyModule::MAX_SIZE #=> 1024
Example¶
#include <rice/rice.hpp>
using namespace Rice;
int calculate(int x, int y) {
return x * y + 1;
}
extern "C"
void Init_my_extension()
{
Module rb_mMath = define_module("MyMath")
.define_module_function("calculate", &calculate)
.define_constant("PI", 3.14159)
.define_constant("E", 2.71828);
}
// Ruby usage:
// MyMath.calculate(3, 4) #=> 13
// MyMath::PI #=> 3.14159