zoukankan      html  css  js  c++  java
  • ruby基础语法

    首发:个人博客,更新&纠错&回复

    学不同语言,常将它们的基础语法搞混,例如if后面有没有(),后面是then还是:还是{,结尾是end还是}。

    这种事情毫无技术含量又毫无乐趣可言,但极大地影响流畅度,所以这次再看ruby语法,决定把基础语法记下来,方便以后查看。

    代码放到了这里,目前只有ruby,待以后用别的语言时再陆续添加。

    内容如下,都是最基础的用法,需要时一看就明白。

    #参考:《Ruby完全自学手册》第三章、第四章
    
    #常量大写字母开头,变量小写字母开头
    CHANG_LIANG = 1
    bian_liang = 2
    bian_liang = "2"#弱类型
    
    ##分支控制
    #if
    if 2 > 1 then
        #
    elsif 2>2 then
        #
    else
        #
    end
    #if后置
    puts "if后置" if 2 > 1
    #unless
    unless 2 > 1 then
        #
    else
        #
    end
    #case
    case 1+1
    when 2 then
        #
    when 3 then
        #
    else
        #
    end
    
    ##循环控制
    #while
    while 1>2
        #
    end
    #until
    until 1<2
        #
    end
    #for
    for i in (1..3)
       #
    end
    #foreach的另一种写法
    (1..3).each do |i|
        #可以用break和next控制,next相当于其他语言的continue
    end
    
    ##面向对象
    module MyModule#定义模块
        #定义类
        class MyClass#类名首字母大写
            attr_accessor :myAttr#定义实例变量
            def initialize
                @myAttr2 = "@定义的实例变量"
            end
            public#访问控制级别public/protected/private
            def myMethod#定义实例方法
                puts "在实例方法中输出" + myAttr + @myAttr2
            end
        end
        #继承
        class MySubClass < MyClass
        end
        #定义模块方法
        def moduleMethod
            puts "MyModule的模块方法"
        end
    end#模块定义的end
    #使用
    myClass = MyModule::MyClass.new#实例化对象
    myClass.myAttr = "实例变量的值"#为实例变量赋值
    myClass.myMethod#调用实例方法
    #动态添加方法
    def myClass.newMethod
        puts "动态添加的方法"
    end
    myClass.newMethod
    #加载另一个文件中声明的模块中的类
    load 'ruby_another_module.rb'
    anotherClass = AnotherModule::AnotherClass.new#另一个文件中声明的对象
    anotherClass.print#调用其方法
    #混入
    class UseMixin
        include MyModule
        extend MyModule
    end
    UseMixin.new.moduleMethod#include语句的作用,成为类的实例方法
    UseMixin.moduleMethod#extend语句的作用,成为类的类方法
    
    ##代码段
    def blockMethod#调用代码段的方法,其中yield表示运行代码段
        yield
    end
    blockMethod {puts "匿名代码段"}
    #带参数的代码段
    def blockMethodWithParam(arg, &b)#定义显式使用代码段的函数
        b.call arg
    end
    block = Proc.new{|x| puts x}#定义非匿名代码段
    blockMethodWithParam("非匿名代码段", &block)#使用非匿名代码段
    blockMethodWithParam("也可以这样使用"){|x| puts x}
    
    ##异常处理
    begin
        #正常代码运行的地方
    rescue Error#相当于其他语言的catch
        #进行一些调整
        retry#重新尝试执行
    ensure
        #相当于其他语言的finally,无论如何都会运行的地方
    end
    
    ##基本类型
    #整数
    a=123_456#可以加下划线
    b=0b101010#二进制
    c=0123#八进制
    d=0xaa#十六进制
    e=?a#ascii码
    puts d
    #浮点数略
    #字符串
    str = "hello, world"
    str = %{你好, "world"}#方便含有引号的内容
    str[0] = ""
    puts str
    #符号略
    #区间
    (1..3).each{|a| puts a}
    #数组
    [1,2,3].each{|a| puts a}
    #字典
    map = {"键甲"=>"键甲的值", "键乙"=>"键乙的值"}
    puts map["键甲"]
    #正则表达式
    "ab12cd".scan(/d/){|m| puts m}#正则表达式字面量
    puts /d/.match("ab12cd")[0]#match方法

    长期欢迎项目合作机会介绍,项目收入10%用于酬谢介绍人。新浪微博:@冷镜,QQ:908789432

  • 相关阅读:
    jquery实现选项卡(两句即可实现)
    常用特效积累
    jquery学习笔记
    idong常用js总结
    织梦添加幻灯片的方法
    LeetCode "Copy List with Random Pointer"
    LeetCode "Remove Nth Node From End of List"
    LeetCode "Sqrt(x)"
    LeetCode "Construct Binary Tree from Inorder and Postorder Traversal"
    LeetCode "Construct Binary Tree from Preorder and Inorder Traversal"
  • 原文地址:https://www.cnblogs.com/zidafone/p/5038666.html
Copyright © 2011-2022 走看看