Ruby基本语法
句法 | |
require "..." | 从默认位置引用库 |
require_relative "..." | 从当前位置引用库 |
变量 | |
本地变量 | 小字母开头或_开头 a, _a |
全局变量 | $开头 $a |
实例变量 | @开头 相当于其他语言的类变量 在任何一处地方创建整个类里共享 attr_reader attr_writer attr_accessor |
类变量 |
@@开头 ● 无法从类外部参照 |
常量 |
大字母开头, 如A, TEMP |
access修饰 | |
public | |
private | |
protected | |
方法定义 | def hello(name) ... end 注意: 指定默认值方法如下 |
可带标签 | def test(a: 0, b: 0, c: 0) ... end def convert(origin, to: 0) |
静态方法 | 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(...) |
属性的访问限制 | |
attr_reader | 从外部可读 类的变量 |
attr_writer | 从外部可写 类的变量 |
attr_accessor | 从外部可读写 类的变量 |
方法的访问限制 | |
public | 对外部公开 |
private | 对外部保密 |
protected | 只能从自己这个类以及自己的类的实例访问 |
模块 | 不能带数据 module ... ... end |
模块使用 | include module-name 或 class-name/instance-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, .... |
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开始的索引 |
loop | loop do ... end 无限循环,可用来实现其他语言的do {} while(); |
异常处理 | begin ... rescue ... ensure ... end begin |
类似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 注: 带入现成代码块要加& |
判断 | |
true false | 不解释 |
其他 | false和nil为伪, 其他都为真 |
最新文章
- clearfix的应用
- miniprofiler对方法的时间性能检测
- linux显示器常见设置
- Recover Binary Search Tree
- Codeforces Educational Codeforces Round 5 E. Sum of Remainders 数学
- Java基础知识强化之IO流笔记46:IO流练习之 把文本文件中数据存储到集合中的案例
- UNIX Filesystems - Evolution Design and Implementation.pdf
- 4th day
- Hadoop单机版安装,配置,运行
- 《转载-两篇很好的文章整合》Android中自定义控件
- AutoMapper 使用总结
- leetcode — jump-game-ii
- JVM思考-init和clinit区别
- HttpSenderUtil向指定 URL 发送POST方法的请求
- android------eclipse运行错误提示 Failed to load D:\Android\sdk\build-tools\26.0.0-preview\lib\dx.jar
- Q他中的乱码再理解
- oracle跟踪sql语句
- Hibernate笔记④--一级二级缓存、N+1问题、saveorupdate、实例代码
- BZOJ 1013 球形空间产生器sphere 高斯消元
- PowerDNS简单教程(2):功能篇