zoukankan      html  css  js  c++  java
  • Ruby入门(1)——数据类型

     (一)数值类型

    1)整型

    整型分两种,如果在31位以内(四字节),那为Fixnum实例。如果超过,即为Bignum实例。

     

    #整型 Integer 以下是一些整型字面量 
    #
    字面量(literal):代码中能见到的值,数值,bool值,字符串等都叫字面量 
    #
    如以下的0,1_000_000,0xa 
    a1=0 
    #
    带千分符的整型 
    a2=1_000_000 
    #
    其它进制的表示 
    a3=0xa 
    puts a1,a2 
    puts a3 
    #puts print 
    都是向控制台打印字符,其中puts带回车换行符 
    =begin 
    这是注释,称作:嵌入式文档注释 
    类似C#中的/**/ 
    =end 

     

    2)浮点型

     

    #浮点型 
    f1=0.0 
    f2=2.1 
    f3=1000000.1 
    puts f3  

    浮点有个圆整错误,例如:0.4-0.3==0.1

    这是不等的。C#中也是如此(采用IEEE754浮点的都是如此)。因为很多浮点数是用一种近似值来表示的。例如0.1,它只是无限接近0.1。因为0.1不能用二进制精确表示。但0.5可以。

    puts 0.3-0.2==0.1 #false 
    puts 0.8-0.3==0.5 #true 
    puts 0.8-0.7==0.1 #false 

     

    3)算术操作

    加减乘除操作符:+-*/;指数操作符为**

    指数不必是整数,例如

     

    #指数算术 
    puts 2**(1/4)#1
    4的商为0,然后20次方为
    puts 16**(1/4.0)#1
    4.0的商为0.25(四分之一),然后开四次方根 

     

    (二)字符串类型

    字符串型可以用单引号或双引号表示。两种表式方法双引号推荐使用:双引号转义字符全;双引号中的字面量可以包含表达式。

    字符串内插格式为:#{}

    name="Ruby" 
    puts name 
    puts "#{name+",ok"}" 

     

    字符串分界符

    可以通过字符串分界符来定义字符串字面量。

    %q用于单引号规则

    %Q用于双引号规则

    分界符成对出现的,例如:()[]{},两个!!。如果使用!做为分界符,其中字面量中又出现了!号,那么,需要\!来转义。当然,如果其中的字面量中出现了成对的分界符(其实是做为操作符出现的),那不需要转义的。

     

    #分界符 
    s1=%Q[this ''/ssss123] 
    puts s1 
    #
    字面量中有分界符,一般情况下要做转义操作 
    s2=%Q!this ''/ssss123\!\!! 
    puts s2 
    #
    字面量中有成对的分界符出现,可以不做转义 
    s3=%Q(2*(1+1)) 
    puts s3 

     

    在大字符串字面量中,不可保证分界符不出现。在ruby中支持header document。即通过定义分界字符串来定义字面量,可大大保证成功率。

    通过<<<<-紧临header 来定义,且结束段单独一行。如果通过<<-来定义的,则结束行前可加空白符。例如:

    #分界字符串 
    s1=<<Header 
    sdfie''''//////[] 
    Header 
    puts s1 

     

    字符串操作

    1)用+号进行字符串连接。对于不是字符串的需要to_s方法进行显示转换,才能用于连接。注意的是,连接后的字符串会新建一个对象返回。

    2)用<<号进行字符串连接。此操作符连接字符串,是修改左侧字符串,而不新建对象。

    3)用*号表示重复左侧字符串,

    4)字符串截取

    通过[]来访问字符串中的子字符串。字符串可以作为字符数组来看待。如果索引为负数,则从右向左取字符。(在1.81.9中通过[]访问返回的不同,1.9中取的更符合习惯)

    通过[]索引访问进行赋值操作,可以替换字符。

    通过[]中两个值进行访问,可以截取子字符串

    5)通过range截取子字符串。

    通过range表示的两个都是索引,这个区别于[]中以逗号分隔的一个用于索引,另一个用于长度。

    [..][…]

    其中两个点的为包含区间。

    5)通过索引字符串,来判断包含关系

    通过[“字符串’]来判断是否包含此子字符串

    (三)字符类型

    字符类型通过?+字符来定义。

    (四)数组

    数组字面量通过[]中以逗号分隔定义,且支持range定义。同时,数组字面量引用同%q%Q类似的%w%W分界符。中间以空格分隔。

    1)数组通过[]索引访问

    同字符串相似,数据通过索引进行访问。如果有两个数值,则一个表示索引,另一个表示元素个数

    2)通过赋值操作插入、删除、替换元素

    3)通过+,-号进行合并和删除元素,且集合做为新集合出现

    4)通过<<号向原数据追加元素

    5)通过*号重复数组元素

    6)通过|和&符号做并集和交集操作(注意顺序)

    (五)哈希类型

    哈希字面量由逗号分隔的kv对来定义,被包括在花括号之间,kv对以=>来定义

    #hash 
    h1={"a1"=>1,"a2"=>2
    h2={:a1=>3,:a2=>4
    h3={a1:5,a2:6
     
    puts h1["a1"] 
    puts h2[:a1] 
    puts h3[:a1] 

     

    (六)范围类型

    通过..符号定义范围类型,它有顺序性。 

    (七)truefalsenil

    比较nil值,可以通过:

    Ojb==nil

    Obj.nil?

    (八)对象标识、对象的类、类型

    对象标识在1.9中可以通过:

    __id__得到,或object_id

     

    对象的类:

    Obj.class==String

    Obj.instance_of? String

     

    x1="ok" 
    puts x1.class==String 
    puts x1.instance_of?String 

     

    判断是不是一种类型的实例也可通过:is_a?===

    x1="ok" 

    puts x1.is_a?String 
    puts x1===String 

     

    (九)对象冻结、污染

    通过freeze冻结对象,被冻结对象将不可变(所有内部状态都不可变)。如果类被冻结,则类不能添加方法。

    通过taint污染对象,被污染的对象会成为污染源(源自它的对象都是被污染的)。通过untaint进行解除污染。

     

    博客园大道至简

    http://www.cnblogs.com/jams742003/

    转载请注明:博客园

  • 相关阅读:

    链表
    队列
    稀疏数组
    SQL——流程控制
    SQL——存储过程与函数
    SOA
    MVC模式
    《一线架构师实践指南》--阅读笔记三
    《一线架构师实践指南》-阅读笔记二
  • 原文地址:https://www.cnblogs.com/jams742003/p/2127708.html
Copyright © 2011-2022 走看看