Road to Ruby Silver (Part 5)



  • This is just some note for who want to get Ruby Silver certification. :)

    Part 1

    Part 2

    Part 3

    Part 4

    Chapter 5: Built-in classes (組み込みクラス)

    5.1. Object class

    5.1.1. Object's id

    a = "foo"
    a.object_id → 70257771679880
    a.__id__ → 70257771679880
    
    • Use object_id, we can know the different between String and Symbol
    "foo".object_id → 70257768130540
    "foo".object_id → 70257768151060
    :foo.object_id → 1150428
    :foo.object_id → 1150428
    

    5.1.2. Class of object

    "foo".class → String
    :foo.class → Symbol
    

    5.1.3. Compare objects

    • equal?: a.equal?(b) → compare object_id of a and b
    • eql?: q.eql?(b) → compare value of a and value of b
    "foo".equal?("foo") → false
    "foo".eql?("foo") → true
    :foo.equal?(:foo) → true
    :foo.eql?(:foo) → true
    
    • == and ===
      • == is same with eql?
      • ===: Normaly, === can be used instead of ==. But the difference is: === can be overwrite when you define a class.
    2.3.0 :irb > class String
    2.3.0 :irb?>   def ==(str)
    2.3.0 :irb?>   false
    2.3.0 :irb?>   end
    SyntaxError: (irb):38: syntax error, unexpected end-of-input, expecting keyword_end
    
    2.3.0 :024 > class String
    2.3.0 :025?>   def ===(str)
    2.3.0 :026?>     return true
    2.3.0 :027?>     end
    2.3.0 :028?>   end
     => :===
    2.3.0 :irb > "foo" === "foo1"
     => true
    

    5.1.4. List methods of object

    Ruby provides below methods:

    - methods
    - private_methods
    - protected_methods
    - public_methods
    - singleton_methods
    

    5.1.5. Clone or copy object

    • clone
    • dup
    a = "str"
    a.object_id → 70257775626380
    b = a.clone
    b.object_id → 70257775641080
    
    a.dup.object_id → 70257780186600
    

    The difference between clone and dup: https://stackoverflow.com/questions/10183370/whats-the-difference-between-rubys-dup-and-clone-methods

    5.1.6. Instance variable

    • instance_variable_get
    • instance_variable_set
    • instance_variables

    5.1.7. method_missing

    class Bar
      def method_missing(name, *args)
        puts name
      end
    end
    
    b = Bar.new
    b.not_existed_method → not_existed_method
    

    5.1.8. Change object to string

    "1.2".to_s
    Object.new.inspect
    

    5.1.9. Special object

    true.class → TrueClass
    false.class → FalseClass
    nil.class → NilClass
    

    5.2. Numeric classes: Numeric, Integer, Fixnum, Bignum, Float

    5.2.1. Numeric class

    • All instance methods of class Numeric
    2.3.0 :irb > Numeric.instance_methods(false)
     => [:%, :[email protected], :[email protected], :<=>, :eql?, :singleton_method_added, :to_int, :div, :coerce, :divmod, :i, :fdiv, :modulo, :remainder, :abs, :magnitude, :real?, :integer?, :zero?, :nonzero?, :floor, :ceil, :round, :truncate, :step, :positive?, :negative?, :quo, :numerator, :denominator, :arg, :rectangular, :rect, :polar, :real, :imaginary, :imag, :abs2, :angle, :phase, :conjugate, :conj, :to_c]
    

    Below are some methods we should make attention to them.

    • ceil
    • floor
    • round
    • truncate
    2.3.0 :001 > 1.9.ceil
     => 2
    2.3.0 :002 > 1.9.floor
     => 1
    2.3.0 :003 > 1.9.round
     => 2
    2.3.0 :004 > 1.9.truncate
     => 1
    2.3.0 :005 > -1.1.ceil
     => -1
    2.3.0 :006 > -1.1.floor
     => -2
    2.3.0 :007 > -1.1.truncate
     => -1
    2.3.0 :008 > -1.1.round
     => -1
    
    • abs
    • step

    Nguồn: Kipalog


Hãy đăng nhập để trả lời
 

Có vẻ như bạn đã mất kết nối tới LaptrinhX, vui lòng đợi một lúc để chúng tôi thử kết nối lại.