Ruby基本语法

更新: 2017/06/09
更新: 2017/06/20 cattr_accessor定义类变量,相当于@@
更新: 2017/06/23 生成类的实例
更新: 2017/06/24 补充loop的说明
更新: 2017/09/07 增加each_with_index, each.with_index(offset = 0)
更新: 2017/09/28  增加了when的条件句的复合写法
更新: 2017/10/28  加粗了类中常量读取,并补充了不能代入两次
                           增加单行的if简写
更新: 2018/02/28 优化了表格的宽度与列数
更新: 2019/03/30 补充类变量无法从类外部参照, 常数可以
 
Ruby里大致有三种条件分支语法
 句法 
 require "..." 从默认位置引用库
 require_relative "..." 从当前位置引用库
  
 变量 
 本地变量 小字母开头或_开头   a, _a
 全局变量 $开头   $a
 实例变量 @开头
 相当于其他语言的类变量
 在任何一处地方创建整个类里共享
 attr_reader
 attr_writer
 attr_accessor
 类变量

 @@开头
 ● 相当于其他语言的类静态变量
 ● 实例方法和静态方法都可以参照

 ● 无法从类外部参照

 

 常量

   大字母开头, 如A, TEMP 
 ● 不要再代入(用两次=)

 

  
 access修饰 
 public 
 private 
 protected 
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
 方法定义def hello(name)
...
 end 

注意: 指定默认值方法如下
          def hello(name = "default")
return 回值,后面没东西返回nil
          默认返回最后一个值
不带参数可以省略括号或者用空括号
不固定长度的参数def test(*arg)
 可带标签 def test(a: 0, b: 0, c: 0)
  ...
 end

 def convert(origin, to: 0)
origin = to
 end
 静态方法 class << class-name
...(defination)
 end
上面这个也可以用来加函数到实例里去
或者
 def class-name.method(...)
...
 end
如在类中则可
 def self.method(...)
 方法改名与删除 alias
 undef
  
  
 类定义 class ...
...
 end
注: 类名要常量(首字母大写)
       类中常数用class-name::const-name来读取
 类扩张  和类定义已将
 class ...
...
 end
 类继承
 inheritance
 class ... < ...
    def initialize(value)
        super(value)
    end
  ...
 end
 类的文字输出 就是p(自定义的数据结果)时会输出的结果
 def inspect()
     return "..."
 end
 生成类的实例 Class Sample
   ...
 end

 Sample.new(...)
 Sample.create(...)
  
  
 属性的访问限制 
 attr_reader 从外部可读  类的变量
 attr_writer 从外部可写  类的变量
 attr_accessor 从外部可读写  类的变量
 方法的访问限制 
 public 对外部公开
 private 对外部保密
 protected 只能从自己这个类以及自己的类的实例访问
  
  
  
  
 模块 不能带数据
 module ...
...
 end
 模块使用 include module-name

 class-name/instance-name.extend(module-name)

静态方法还可以
 extend module-name
 查看是否包含模块 MyThird.include?(SayHello)
 查看祖先 MyThird.ancestors()
 查看直接母类 MyThird.superclass()
  
  
  
  
  
  
  
  
  
  
  
  
  
  
三种条件分支 
 if ... (then)
...
 elsif ... (then)
...
 else ... (then)
...
 end
 (then)可省略

  .... if 条件



式 if 式 右边成立则运行左边
 unless ... (then)
...
 else 
...
 end
条件不成立时运行unless部分 
 case  a
 when ... (then)
...
 when ... (then)
...
 when ... (then)
...
 else 
...
 end
 就是其他语言的Switch
 注意,多个条件可以用逗号分隔

 when 1, 2, 3, ....
    ...
 end
  
 6种循环语句 break
 next   相当于其他语言的continue
 redo   基本不用
 times n = 5
 n.times do |temp|
  ...
 end
 for for i in 0..4 
...
 end
 while while ... 
...
 end
 until 和while相反
 each range = 1..10
 range.each do
...
 end

增加从0开始的索引
range.each_with_index do 
 ...
end 
增加任意索引
range.each.with_index(n) do 
 ...
end
 loop loop do
...
 end
无限循环,可用来实现其他语言的do {} while();
  
 异常处理 begin
      ...
 rescue
     ...
 ensure
     ...
 end



begin
      ...
 rescue exA1, exA2 ... => ...
     ...
 rescue exB1, exB2 ... => ...
     ...
      .
      .
      .
      .
 ensure
     ...
 end
注: $! 最后发生的异常
       $@最后发生的异常的位置
       ensure 记录最后一定要执行的部分
       retry 重试
       sleep n  暂停n秒
       raise 发出异常
       raise ex-class message
例外对象的方法
 class 异常种类
 message 异常信息
 backtrace 异常位置信息(和$!.backtrace相同)
 类似Swift ??的用法 a = Integer("abc") rescue 123
  
  
  
  
  
  
  
  
  
  
  
运算符  
范围  Range.new(1, 10)
重载  def +(rhs)
     ...
 end
 单项运算法重载 只可以+, -, ~, !
  
  
  
  
  
  
 代码块 do |a, b, c, ...|
   ...
 end

注: redo返回时候一切回到进入redo的那次循环最开始
 运行代码块 def ...
   ...
   yield
   ...
 end 
 检验是否有代码块  block_given?
 代码块类 sayHello = Proc.new() do |name|
   ...
 end
执行 sayHello.call("WACQY")
 有代码块的方法 def sample(a, b, &method)
   ...
   block.call(method)
   ...
 end

注: 带入现成代码块要加&
  sample(3, 4, &sayHello)
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
 
对错判断
 判断 
 true  false 不解释
 其他 false和nil为伪, 其他都为真

 
谜之编译:
 临时发现的,不知道什么鬼。先记下来。以后懂了再写
 
a = 0
while a <= 10
  case a
  when 0 then
    puts("a is 0")
  when 1 then
    puts("a is 1")
  when a > 1 && a <= 10
    puts("catch a")
  end
  a += 1
end
 
运行结果

 

转载于:https://www.cnblogs.com/lancgg/p/8281941.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值