• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    ruby的程序结构介绍

    概括、ruby程序由一个或多个ruby源文件组成,源文件由模块组成,模块内部有控制结构、类对象、方法、及表达式等元素,下面就按照这个思路来总结ruby的程序组织结构。

     一、源文件

     1.1、文件包含
     

    复制代码 代码如下:

     #file1.rb 
    inc_path=$0.sub(/\/\w+\.rb/,"") #获取当前路径的目录 
    $:.insert(-1,inc_path) #将当前路径加入到load路径数组 
     
    require "file2.rb" 
    require "file2.rb" #require包含文件只会被导入一次 
     
    load "file3.rb" 
    load "file3.rb" #每次load都会无条件再次导入文件 
     
     
    #file2.rb 
    print "file2.rb is included\n"  
     
     
    #file3.rb 
    print "file3 is included\n"
     

    1.2、源文件执行顺序


    复制代码 代码如下:

    #coding=utf-8   
    =begin 
    这里是 
    多行注释 
    =end 
     
    END{print "end1\n"}   
    END{print "end2\n"}   
    #END块的执行顺序与出现顺序相反   
     
    print "text\n"   
        
    BEGIN{print "begin1\n"}   
    BEGIN{print "begin2\n"}   
    #BEGIN块的执行顺序与出现顺序相同   
    #BEGIN-TEXT-END 
     
    #__END__开头的行后面的内容被忽略 
    __END__ 
    print "no_text\n"

    1.3、源文件书写规则

    ◆大小写敏感
    ◆换行符后只能有空白符,并且都会被忽略
    ◆类和模块及常量名要以大写字母开头,变量以小写字母或者unicode开头

    二、模块

    复制代码 代码如下:

        #module1.rb 
        inc_path=$0.sub(/\/\w+\.rb/,"") #获取当前路径的目录 
        $:.insert(-1,inc_path) #将当前路径加入到load路径数组 
         
        require "module2.rb" 
         
        print Mymod::VAR1,"\n" 
        Mymod.out 
         
        include Mymod #把Mymod导入到当前名字空间 
        print VAR1 
         
         
        #module2.rb 
        print "module2.rb is included\n" 
         
        module Mymod 
            var1=99  #模块内的变量 
            VAR1=100 #模块内的常量 
             
            print "Mymode is included,var1 is ",var1,"\n" 
             
            def Mymod.out #模块内的方法必须加上模块名 
                print "Mymod.out run\n" 
            end 
        end  

    三、控制结构

    ruby的控制结构和其他语言一样无非就是顺序,分支及循环,但写法上相当的灵活。

    3.1、分支结构之if

    复制代码 代码如下:

    #if.rb 
    num=100   
    if (num>200) #可以用unless进行条件取反   
      print "num>200\n"   
    elsif num>100   
      print "num>100\n"   
    else   
      print "num=100\n" #此句执行   
    end   
         
    print "num=100\n" if num=100 #if语句可后置,并且if语句本身也是表达式也具有值 
    if num=100 then print "num100\n" #then可用:替换

    3.2、分支结构之case

    复制代码 代码如下:

        num=100 
         
        str1=\&;
        case 
            when num>200 then "num>200" 
            when num>100 then "num>100" 
            else "num=100" #else不使用then 
        end 
         
        print str1,"\n" 
         
         
        case num 
            when 201 : print "num>200"#:和then起到相同的作用 
            print 101 when num>100 
            else print "num=100" 
        end 

    3.3、循环结构

    复制代码 代码如下:

        num=1 
         
        while num5 #反义词until 
            print num 
            num+=1 
        end 
         
        print "\n" 
         
        arr1=[1,2,3,4,5] 
         
        for i in arr1 
            print i 
        end 

    复制代码 代码如下:

        num=1 
        loop{ #注意{必须和loop在同一行 
            num+=1 
            next if num==3 #不输出3 
            redo if num==4 #把循环体内此行的前面的语句再执行一遍 
            break if num>5 #大于5则退出循环 
            print num 
        } 
        #输出25 
        #while,until,for也可用next,redo,break 

    3.4、控制结构补充

    复制代码 代码如下:

        print "0 is true!" #0也是true 
        print "empty string is true!" #""也是true 
        #在ruby中只有nil被判断是false 

    四、方法定义

    ruby中的方法支持默认参数,可变参数但不支持关键字参数,可以通过传入散列表来模拟实现,方法的最后一句的执行结果就是其返回值。

    4.1、一般方法

    复制代码 代码如下:

        def non_para 
            print "this is non_para method\n" 
        end 
         
        def many_para(para1,default_para2=2,*dynamic_para3) 
            print "first para is ",para1,"\n" 
            print "default_para is ",default_para2,"\n" 
            for i in dynamic_para3 
                print i,"," 
            end 
        end 
         
        non_para() 
        many_para(1,3,5,7,9) 

    4.2、方法的作用范围

    ruby根据方法名来确定方法的作用范围,这样做增加了程序的阅读性。

    复制代码 代码如下:

        #coding=utf-8 
         
        str1="abcdefg" 
         
        def str1.len #对象的方法 
            puts self.length 
        end 
         
        str1.len 
         
        class Person 
            def Person.info #类的方法即静态方法 
                puts "this is a perosn" 
            end 
        end 
         
        Person.info 

    4.3、BLOCK

    与方法关联的BLOCK为方法提供了可扩展性。可以把方法中的一部分逻辑抽象成BLOCK独立出来,和子程序调用所不同的是,BLOCK是灵活的,也就是说我可以只完成方法的主干部分,有一些逻辑可以根据需要在调用方法时进行扩展。

    复制代码 代码如下:

        def func para1 
            localvalue="local value" 
            yield(para1) 
        end 
         
        func(100){|para1|print "value of para1 is ",para1,"\n"} 
         
        func(100) do |para1| 
        print "double value of para1 is",para1*2,"\n" 
        #print local_value 局部变量已不能被继承 
        end 
        #yield最后一条语句执行结果就是给方法的返回值。 

    4.5、方法补充
            ◆可以undef 方法名取消方法的定义

            ◆alias 方法名 方法别名 可以为方法定义不同的名字

            ◆方法 得到方法的引用,调用时采用 方法引用.call的方式

    五、类及对象

    5.1、普通的类定义如下

    复制代码 代码如下:

        class Person 
            def initialize(name,age)#属性在initialize中定义 
                @name=name 
                @age=age 
            end 
            def name#属性不能直接被访问,必须通过方法接口进行访问 
                @name 
            end 
            def age 
                @age 
            end 
        end 
         
        p1=Person.new("justsong",28)#会用相同的参数调用initialize 
        print p1.name,"\n",p1.age 

    5.2、类中方法的访问权限默认为public,ruby有和c++类似的权限声明方式。

    复制代码 代码如下:

        class Person 
            def initialize(name,age)#属性在initialize中定义 
                @name=name 
                @age=age 
            end 
            def name#属性不能直接被访问,必须通过方法接口进行访问 
                @name 
            end 
        private#protected,public 
            def age 
                @age 
            end 
        end 
         
        p1=Person.new("justsong",28)#会用相同的参数调用initialize 
        print p1.name,"\n" 
        #print p1.age,private调用将被禁止 

    5.3、由于属性必须通过方法接口进行访问,所以在书写程序时有些繁琐,可以采用一下的方法进行简写。

    复制代码 代码如下:

        class Person 
            attr_reader :name #具有只读权限 
            attr_writer :age #具有只写权限 
            attr_accessor :country #具有读写权限 
            def initialize(name,age,country) 
                @name=name 
                @age=age 
                @country=country 
            end 
        end 
         
        #其实是ruby自动生成了一些方法 
         
        p1=Person.new("justsong",28,"china")#会用相同的参数调用initialize 
         
        print p1.name,"\n" 
        print p1.country,"\n" 
        #print p1.age,会提示未定义相应方法 

    5.4、ruby的类也具有类变量(静态变量)及类方法(静态方法)

    复制代码 代码如下:

        class Person 
            attr_reader :name 
            @@country="china" #静态变量 
            def initialize(name) 
                @name=name 
            end 
            def Person.output #静态方法 
                print "country is ",@@country,"\n" 
            end      
        end 
         
        Person.output 
         
        p1=Person.new("zhangsan") 
        p2=Person.new("lisi") 
        print p1.name,"\n",p2.name 

    5.5、类的继承

    复制代码 代码如下:

        class Person 
            attr_reader :name 
            def initialize(name) 
                @name=name 
            end 
        end 
         
        class Student Person 
            attr_reader :grade 
            def initialize(name,grade) 
                super(name)#利用super调用父类同名方法 
                @grade=grade 
            end 
        end 
         
        s1=Student.new("justsong",10) 
        print s1.name,"\n",s1.grade 

    5.6、嵌套类

    直接在类中定义类,或是在类定义时用::指定的类的所属类。

    上一篇:ruby基本数据类型简明介绍
    下一篇:Ruby中的return、break、next详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    ruby的程序结构介绍 ruby,的,程序,结构,介绍,