diff options
Diffstat (limited to 'kernel.rb')
| -rw-r--r-- | kernel.rb | 102 |
1 files changed, 42 insertions, 60 deletions
@@ -17,7 +17,7 @@ module Kernel # def class Primitive.attr! :leaf - Primitive.cexpr! 'rb_obj_class(self)' + Primitive.cexpr! 'rb_obj_class_must(self)' end # @@ -40,7 +40,7 @@ module Kernel # s1.inspect #=> "#<Klass:0x401b3a38 @str=\"Hi\">" # s2.inspect #=> "#<Klass:0x401b3998 @str=\"Hi\">" # - # This method may have class-specific behavior. If so, that + # This method may have class-specific behavior. If so, that # behavior will be documented under the #+initialize_copy+ method of # the class. # @@ -58,10 +58,10 @@ module Kernel # a.freeze #=> ["a", "b", "c"] # a.frozen? #=> true #-- - # Determines if the object is frozen. Equivalent to \c Object\#frozen? in Ruby. - # \param[in] obj the object to be determines - # \retval Qtrue if frozen - # \retval Qfalse if not frozen + # Determines if the object is frozen. Equivalent to `Object#frozen?` in Ruby. + # @param[in] obj the object to be determines + # @retval Qtrue if frozen + # @retval Qfalse if not frozen #++ # def frozen? @@ -73,7 +73,7 @@ module Kernel # call-seq: # obj.tap {|x| block } -> obj # - # Yields self to the block, and then returns self. + # Yields self to the block and then returns self. # The primary purpose of this method is to "tap into" a method chain, # in order to perform operations on intermediate results within the chain. # @@ -87,6 +87,7 @@ module Kernel #++ # def tap + Primitive.attr! :inline_block yield(self) self end @@ -99,54 +100,33 @@ module Kernel # # 3.next.then {|x| x**x }.to_s #=> "256" # - # Good usage for +then+ is value piping in method chains: + # A good use of +then+ is value piping in method chains: # # require 'open-uri' # require 'json' # - # construct_url(arguments). - # then {|url| URI(url).read }. - # then {|response| JSON.parse(response) } + # construct_url(arguments) + # .then {|url| URI(url).read } + # .then {|response| JSON.parse(response) } # - # When called without block, the method returns +Enumerator+, + # When called without a block, the method returns an +Enumerator+, # which can be used, for example, for conditional # circuit-breaking: # - # # meets condition, no-op + # # Meets condition, no-op # 1.then.detect(&:odd?) # => 1 - # # does not meet condition, drop value + # # Does not meet condition, drop value # 2.then.detect(&:odd?) # => nil # - # Good usage for +then+ is value piping in method chains: - # - # require 'open-uri' - # require 'json' - # - # construct_url(arguments). - # then {|url| URI(url).read }. - # then {|response| JSON.parse(response) } - # def then - unless block_given? + Primitive.attr! :inline_block + unless defined?(yield) return Primitive.cexpr! 'SIZED_ENUMERATOR(self, 0, 0, rb_obj_size)' end yield(self) end - # - # call-seq: - # obj.yield_self {|x| block } -> an_object - # - # Yields self to the block and returns the result of the block. - # - # "my string".yield_self {|s| s.upcase } #=> "MY STRING" - # - def yield_self - unless block_given? - return Primitive.cexpr! 'SIZED_ENUMERATOR(self, 0, 0, rb_obj_size)' - end - yield(self) - end + alias yield_self then module_function @@ -161,11 +141,12 @@ module Kernel # loop do # print "Input: " # line = gets + # # break if q, Q is entered or EOF signal (Ctrl-D on Unix, Ctrl-Z on windows) is sent # break if !line or line =~ /^q/i # # ... # end # - # StopIteration raised in the block breaks the loop. In this case, + # A StopIteration raised in the block breaks the loop. In this case, # loop returns the "result" value stored in the exception. # # enum = Enumerator.new { |y| @@ -178,8 +159,9 @@ module Kernel # puts enum.next # } #=> :ok def loop - unless block_given? - return enum_for(:loop) { Float::INFINITY } + Primitive.attr! :inline_block + unless defined?(yield) + return Primitive.cexpr! 'SIZED_ENUMERATOR(self, 0, 0, rb_f_loop_size)' end begin @@ -197,10 +179,10 @@ module Kernel # # Returns <i>arg</i> converted to a float. Numeric types are # converted directly, and with exception to String and - # <code>nil</code> the rest are converted using - # <i>arg</i><code>.to_f</code>. Converting a String with invalid - # characters will result in a ArgumentError. Converting - # <code>nil</code> generates a TypeError. Exceptions can be + # <code>nil</code>, the rest are converted using + # <i>arg</i><code>.to_f</code>. Converting a String with invalid + # characters will result in an ArgumentError. Converting + # <code>nil</code> generates a TypeError. Exceptions can be # suppressed by passing <code>exception: false</code>. # # Float(1) #=> 1.0 @@ -229,22 +211,22 @@ module Kernel # With a non-zero +base+, +object+ must be a string or convertible # to a string. # - # ==== numeric objects + # ==== \Numeric objects # - # With integer argument +object+ given, returns +object+: + # With an integer argument +object+ given, returns +object+: # # Integer(1) # => 1 # Integer(-1) # => -1 # - # With floating-point argument +object+ given, + # With a floating-point argument +object+ given, # returns +object+ truncated to an integer: # # Integer(1.9) # => 1 # Rounds toward zero. # Integer(-1.9) # => -1 # Rounds toward zero. # - # ==== string objects + # ==== \String objects # - # With string argument +object+ and zero +base+ given, + # With a string argument +object+ and zero +base+ given, # returns +object+ converted to an integer in base 10: # # Integer('100') # => 100 @@ -254,7 +236,7 @@ module Kernel # to specify the actual base (radix indicator): # # Integer('0100') # => 64 # Leading '0' specifies base 8. - # Integer('0b100') # => 4 # Leading '0b', specifies base 2. + # Integer('0b100') # => 4 # Leading '0b' specifies base 2. # Integer('0x100') # => 256 # Leading '0x' specifies base 16. # # With a positive +base+ (in range 2..36) given, returns +object+ @@ -265,8 +247,8 @@ module Kernel # Integer('-100', 16) # => -256 # # With a negative +base+ (in range -36..-2) given, returns +object+ - # converted to an integer in the radix indicator if exists or - # +-base+: + # converted to the radix indicator if it exists or + # +base+: # # Integer('0x100', -2) # => 256 # Integer('100', -2) # => 4 @@ -275,7 +257,7 @@ module Kernel # Integer('0o100', -10) # => 64 # Integer('100', -10) # => 100 # - # +base+ -1 is equal the -10 case. + # +base+ -1 is equivalent to the -10 case. # # When converting strings, surrounding whitespace and embedded underscores # are allowed and ignored: @@ -283,7 +265,7 @@ module Kernel # Integer(' 100 ') # => 100 # Integer('-1_0_0', 16) # => -256 # - # ==== other classes + # ==== Other classes # # Examples with +object+ of various other classes: # @@ -291,22 +273,22 @@ module Kernel # Integer(Complex(2, 0)) # => 2 # Imaginary part must be zero. # Integer(Time.now) # => 1650974042 # - # ==== keywords + # ==== Keywords # - # With optional keyword argument +exception+ given as +true+ (the default): + # With the optional keyword argument +exception+ given as +true+ (the default): # # - Raises TypeError if +object+ does not respond to +to_int+ or +to_i+. # - Raises TypeError if +object+ is +nil+. - # - Raise ArgumentError if +object+ is an invalid string. + # - Raises ArgumentError if +object+ is an invalid string. # # With +exception+ given as +false+, an exception of any kind is suppressed # and +nil+ is returned. - + # def Integer(arg, base = 0, exception: true) if Primitive.mandatory_only? Primitive.rb_f_integer1(arg) else - Primitive.rb_f_integer(arg, base, exception); + Primitive.rb_f_integer(arg, base, exception) end end end |
