Module: Concurrent::ImmutableStruct
- Defined in:
- lib/concurrent/immutable_struct.rb
Overview
A thread-safe, immutable variation of Ruby's standard Struct
.
Constant Summary
Class Method Summary (collapse)
-
+ (undocumented) new(*args, &block)
Factory for creating new struct classes.
Instance Method Summary (collapse)
-
- (Boolean) ==(other)
Equality.
-
- (Object) [](member)
Attribute Reference.
-
- (undocumented) each {|value| ... }
Yields the value of each struct member in order.
-
- (undocumented) each_pair {|member, value| ... }
Yields the name and value of each struct member in order.
-
- (String) inspect
(also: #to_s)
Describe the contents of this struct in a string.
-
- (Fixnum) length
(also: #size)
included
from Synchronization::AbstractStruct
Returns the number of struct members.
-
- (Array) members
included
from Synchronization::AbstractStruct
Returns the struct members as an array of symbols.
-
- (Synchronization::AbstractStruct) merge(other) {|member, selfvalue, othervalue| ... }
Returns a new struct containing the contents of
other
and the contents ofself
. -
- (Array) select {|value| ... }
Yields each member value from the struct to the block and returns an Array containing the member values from the struct for which the given block returns a true value (equivalent to
Enumerable#select
). -
- (Hash) to_h
Returns a hash containing the names and values for the struct’s members.
-
- (Array) values
(also: #to_a)
Returns the values for this struct as an Array.
-
- (undocumented) values_at(*indexes)
Returns the struct member values for each selector as an Array.
Class Method Details
+ (undocumented) new(*args, &block)
Factory for creating new struct classes.
new([class_name] [, member_name]+>) -> StructClass click to toggle source
new([class_name] [, member_name]+>) {|StructClass| block } -> StructClass
new(value, ...) -> obj
StructClass[value, ...] -> obj
The first two forms are used to create a new struct subclass class_name
that can contain a value for each member_name . This subclass can be
used to create instances of the structure like any other Class .
If the class_name
is omitted an anonymous struct class will be created.
Otherwise, the name of this struct will appear as a constant in the struct class,
so it must be unique for all structs under this base class and must start with a
capital letter. Assigning a struct class to a constant also gives the class
the name of the constant.
If a block is given it will be evaluated in the context of StructClass
, passing
the created class as a parameter. This is the recommended way to customize a struct.
Subclassing an anonymous struct creates an extra anonymous class that will never be used.
The last two forms create a new instance of a struct subclass. The number of value
parameters must be less than or equal to the number of attributes defined for the
struct. Unset parameters default to nil. Passing more parameters than number of attributes
will raise an ArgumentError
.
74 75 76 77 78 79 80 81 82 |
# File 'lib/concurrent/immutable_struct.rb', line 74 def self.new(*args, &block) clazz_name = nil if args.length == 0 raise ArgumentError.new('wrong number of arguments (0 for 1+)') elsif args.length > 0 && args.first.is_a?(String) clazz_name = args.shift end FACTORY.define_struct(clazz_name, args, &block) end |
Instance Method Details
- (Boolean) ==(other)
Equality
51 52 53 |
# File 'lib/concurrent/immutable_struct.rb', line 51 def ==(other) ns_equality(other) end |
- (Object) [](member)
Attribute Reference
46 47 48 |
# File 'lib/concurrent/immutable_struct.rb', line 46 def [](member) ns_get(member) end |
- (undocumented) each {|value| ... }
Yields the value of each struct member in order. If no block is given an enumerator is returned.
56 57 58 59 |
# File 'lib/concurrent/immutable_struct.rb', line 56 def each(&block) return enum_for(:each) unless block_given? ns_each(&block) end |
- (undocumented) each_pair {|member, value| ... }
Yields the name and value of each struct member in order. If no block is given an enumerator is returned.
62 63 64 65 |
# File 'lib/concurrent/immutable_struct.rb', line 62 def each_pair(&block) return enum_for(:each_pair) unless block_given? ns_each_pair(&block) end |
- (String) inspect Also known as: to_s
Describe the contents of this struct in a string.
29 30 31 |
# File 'lib/concurrent/immutable_struct.rb', line 29 def inspect ns_inspect end |
- (Fixnum) length Also known as: size Originally defined in module Synchronization::AbstractStruct
Returns the number of struct members.
- (Array) members Originally defined in module Synchronization::AbstractStruct
Returns the struct members as an array of symbols.
- (Synchronization::AbstractStruct) merge(other) {|member, selfvalue, othervalue| ... }
Returns a new struct containing the contents of other
and the contents
of self
. If no block is specified, the value for entries with duplicate
keys will be that of other
. Otherwise the value for each duplicate key
is determined by calling the block with the key, its value in self
and
its value in other
.
36 37 38 |
# File 'lib/concurrent/immutable_struct.rb', line 36 def merge(other, &block) ns_merge(other, &block) end |
- (Array) select {|value| ... }
Yields each member value from the struct to the block and returns an Array
containing the member values from the struct for which the given block
returns a true value (equivalent to Enumerable#select
).
68 69 70 71 |
# File 'lib/concurrent/immutable_struct.rb', line 68 def select(&block) return enum_for(:select) unless block_given? ns_select(&block) end |
- (Hash) to_h
Returns a hash containing the names and values for the struct’s members.
41 42 43 |
# File 'lib/concurrent/immutable_struct.rb', line 41 def to_h ns_to_h end |
- (Array) values Also known as: to_a
Returns the values for this struct as an Array.
17 18 19 |
# File 'lib/concurrent/immutable_struct.rb', line 17 def values ns_values end |
- (undocumented) values_at(*indexes)
Returns the struct member values for each selector as an Array.
A selector may be either an Integer offset or a Range of offsets (as in Array#values_at
).
24 25 26 |
# File 'lib/concurrent/immutable_struct.rb', line 24 def values_at(*indexes) ns_values_at(indexes) end |