zoukankan      html  css  js  c++  java
  • Ruby编程语言学习笔记3

    对应Ruby编程语言第三章

    =begin
    Ruby包含了5个表示数字的内建类:Numeric Float Integer Fixnum Bignum
    及标准库中的3个数值类:Complex BigDecimal Rational  
                 Numeric
                    |
       _______________________________________
       |         |       |          |         |
     Integer Float   Complex  BigDecimal Rational
       |
     ___________
     |         |
     Fixnum  Bignum       

    Ruby中的所有数字对象都是Numeric类的示例,所有的整数都是Integer的实例,
    Bignum和Fixnum是透明转换的(如果一个Fixnum对象,其结果值超出Fixnum范围,则透明转换为Bignum,反之亦然)
    =end

    #整数字面量
    #
    可以在整数字面量里插入下划线,此特性被称为千分符
    print 1_000_000,"\n" #表示100万
    #
    0开头的是8进制,0x或者0X开头的是16进制,0b或者0B开头的是二进制数
    print 017,"\n"         #八进制,输出十进制15(1*8+7=15)
    print 0377,"\n"        #八进制,输出十进制255(3*8*8+7*8+7=255)
    print 0b1111_1111,"\n" #二进制 输出255(128+64+32+16+8+4+2+1=255)
    print 0xFF,"\n"        #十六进制 输出255(15*16+15=255)

    #浮点数字面量
    print 6.02e2,"\n"  #602.0
    #
    求余操作
    print 5%2,"\n"     #1
    print 1.5%0.4,"\n" #0.3

    print 5/-2,"\n"     #1
    print -5/2,"\n"     #1

    #divmod method return a array for storing quotient(商) and remainder(余数)
    p 10.divmod(3) #=>[3, 1]

    #remainder method remainder which is the same as dividend Positive or negative
    p 10.remainder(3.5) #=>3.0
    p 10.remainder(-3.5) #=>3.0
    p -10.remainder(3.5) #=>-3.0
    p -10.remainder(-3.5) #=>-3.0

    #modulo method is the same as % operation
    p 10.modulo(3) #=>1

    #n.times block :repeat n time to execute block
    array=[]
    10.times do
      |i|
      array<<i
    end
    p array #=>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    #start.upto(end) block : loop start to end with 1 as increment factor
    array=[]
    2.upto(10){|i| array<<i }
    p array #=>[2, 3, 4, 5, 6, 7, 8, 9, 10]

    #start.downto(end) block : loop start to end with 1 as decrement factor
    array=[]
    10.downto(2){ |i| array<<i }
    p array #=>[10, 9, 8, 7, 6, 5, 4, 3, 2]

    #start.upto(end) block : loop start to end with step as increment factor
    array=[]
    2.step(10,2){ |i| array<<i }
    p array #=>[2, 4, 6, 8, 10]

    #Hashes(哈希)

    hash=Hash.new
    hash["one"]=1
    hash["two"]=2
    puts hash     #{"one"=>1, "two"=>2}

    hash2={}
    hash2["one"]=2
    hash2["two"]=4
    puts hash2    #{"one"=>2, "two"=>4}

    #Hash Literals(哈希字面量)
      #哈希字面量就是:包含在花括号中由逗号分隔的一列键值对
    numbers={"one"=>1,"two"=>2,"three"=>3,4=>8}
    puts numbers  #{"one"=>1, "two"=>2, "three"=>3, 4=>8}

      #作为哈希的键,Symbol对象比字符串更高效,Symbol是不可变的,功能受限的字符串,以冒号为前缀的标识符:如 :string,:one
    numbers={:one=>1,:two=>2,:three=>3,:f4=>8}
    puts numbers  #{:one=>1, :two=>2, :three=>3, :f4=>8}

      #Ruby1.9中,是由Symbol作为键时,可以用如下的简洁方式来构建哈希字面量
    numbers={one:1,two:2}
    puts numbers  #{:one=>1, :two=>2}
    #
    Ranges(范围)
      #Ranges表示位于一个开始值和一个结束值之间的值,起始值和终止值中间放置2个点(包含终止值)和3个点(不包含终止值)
    r=1..10
    r.each{|item| print item ,' '}  #1 2 3 4 5 6 7 8 9 10
    r=1...10
    r.each{|item| print item ,' '}  #1 2 3 4 5 6 7 8 9
     
      #可以用include? 来表示一个值是否被包含在ranges内
    puts r.include? 8 #true

    #Symbol(符号)
    #
    一个Symbol对象引用一个符号,Symbol是不可变的,功能受限的字符串,以冒号为前缀的标识符

    sym=:"Symbol demo"
    puts sym #Symbol demo

    s="Symbol demo"
    sym=:"#{s}"
    puts sym #Symbol demo

    #Ruby解释器会维护一个符号表(symbol table),它存储了其所知晓的所以类、方法及变量的名称。
    #
    在反射代码(reflective code)里,符号常常被用于引用方法名,比如想知道某个对象是否包含each方法
    o=Object.new
    puts o.respond_to? :each  #false

    #你可以使用intern或者to_sym方法讲一个String转换为一个Symbol
    #
    可以使用to_s方法或者id2name讲一个Symbol转换回String
    str="This is string"
    sym=str.intern
    sym=str.to_sym
    puts sym  #This is string
    str2=sym.to_s
    str2=sym.id2name
    puts str2 #This is string
    #
    2个字符串包含相同的内容,但是他们可以是2个不同的对象,
    #
    对于内容相同的字符串,转换成Symbol时 总是指向同一个Symbol对象

    #True False Nil
    #
    true false 是2个布尔值,代表了真和假,nil是特殊的保留值,用于表示没有值
    #
    如果想检测一个值是否为nil,可以用如下的方式:
    #
    1.和nil进行比较
    o==nil
    #2.用nil?方法
    o.nil?
    #true false nil引用的都是对象不是数值,它们分别对应的是TrueClass,FalseClass,NilClass类的实例

    #Ruby需要一个布尔值时,nil表现为false,nil和false之外的所有制都表现为true 

  • 相关阅读:
    Kettle 实现mysql数据库不同表之间数据同步——实验过程
    Kettle ETL 来进行mysql 数据同步——试验环境搭建(表中无索引,无约束,无外键连接的情况)
    并查集知识总结
    c# 线程同步问题(about volatile)
    c# 线程的等待(堵塞)
    net中多线程返回值
    c# 中的 lock monitor mutex Semaphore 的比较
    c#两种同步结构
    links-some-blog
    T-SQL中的APPLY用法
  • 原文地址:https://www.cnblogs.com/jeriffe/p/2538376.html
Copyright © 2011-2022 走看看