mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
71cb3c2e3a
ROM method tables used static mrb_mt_tbl variables shared across the process. The next pointer in each wrapper was mutated by mrb_mt_init_rom(), causing cross-state contamination when multiple mrb_state instances existed. Allocate mrb_mt_tbl wrappers per-state via mrb_malloc(). The const mrb_mt_entry[] arrays remain static and shared. Wrappers are tracked in mrb->rom_mt and freed at mrb_close(). Remove MRB_MT_ROM_TAB macro; add MRB_MT_INIT_ROM macro that auto-computes size and calls the new mrb_mt_init_rom(). Co-authored-by: Claude <noreply@anthropic.com>
mruby-complex
mruby-complex is an mrbgem that provides a Complex class for mruby, allowing for the representation and manipulation of complex numbers. It is designed to be compatible with the Complex class in standard Ruby.
Functionality
The Complex class provided by this mrbgem supports:
- Creation of complex numbers from real and imaginary parts, or using the
isuffix for numbers. - Basic arithmetic operations: addition (
+), subtraction (-), multiplication (*), division (/). - Methods to access the real and imaginary parts (
real,imaginaryorimag). - Calculation of absolute value (
abs,magnitude), argument/angle (arg,angle,phase), and square of the absolute value (abs2). - Complex conjugate (
conjugate,conj). - Conversion to polar coordinates (
polar). - Conversion to other numeric types where appropriate (
to_f,to_i,to_r,to_c). - Inspection and string representation (
inspect,to_s).
Usage Examples
Here are some basic examples of how to use the Complex class:
# Creating complex numbers
c1 = Complex(1, 2) # => (1+2i)
c2 = 3 + 4i # => (3+4i)
c3 = Complex.polar(5, Math::PI/2) # => (0.0+5.0i) (approximately)
# Arithmetic operations
puts c1 + c2 # => (4+6i)
puts c1 - c2 # => (-2-2i)
puts c1 * c2 # => (-5+10i)
puts c1 / c2 # => (0.44+0.08i)
# Accessing parts
puts c1.real # => 1
puts c1.imaginary # => 2
# Other methods
puts c2.abs # => 5.0
puts c2.arg # => 0.9272952180016122 (radians)
puts c2.conjugate # => (3-4i)
puts c1.polar # => [2.23606797749979, 1.1071487177940904]
# Numerics can be converted to Complex
puts 5.to_c # => (5+0i)
puts 2.3.to_c # => (2.3+0i)
# The `i` method on numerics creates a complex number with zero real part
puts 5i # => (0+5i)
puts 2.3i # => (0+2.3i)
Note
This mrbgem aims to provide functionality similar to the Complex class found in the standard Ruby library. Refer to the Ruby documentation for Complex for more detailed information on the behavior of various methods.