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

  • 相关阅读:
    ansible自动化运维04
    ansible自动化运维03
    ansible自动化运维02
    ansible自动化运维01
    mysql innodb存储引擎和一些参数优化
    Mysql 数据库常用配置命令
    zabbix server3.4 使用mailx配置邮件报警
    32_redis cluster的核心原理分析:gossip通信、jedis smart定位、主备切换
    31_redis cluster的自动化slave迁移实现更强的高可用架构的部署方案
    30_redis cluster通过master水平扩容来支撑更高的读写吞吐+海量数据
  • 原文地址:https://www.cnblogs.com/zidafone/p/5038666.html
Copyright © 2011-2022 走看看