Ruby(1):入门
安装:
一般来说linux会自动装ruby,可以通过: ruby -v 来查看ruby版本
直接使用ruby命令的话,是用来执行ruby文件的。如果要打开交互式ruby解释器。只需要在控制台输入:irb 即可。 irb的命令前面有一个形式如 :irb(main):001:0> 的开始的提示,其中的两个数字第一个表示第几行,第二个表示嵌套的层次。
语法特点:
Ruby的设计初衷就是以最面向人的语法习惯来的。所以Ruby代码的规范看起来比其他任何语言都宽松。具体表现如下:
1. 语句的结尾不需要使用分号结束
2. 没有任何特殊的缩进要求
3. 对于只带一个参数的函数,函数的括号可以省略
4. 一切皆对象。每种对象都有丰富的方法,且可以直接给内置的对象增加方法。
也正是由于第2点,父层与子层之间没有缩进要求,所以不同于python的是:ruby的语法块之间需要使用end关键字来表示结束。
简单的使用:
计算:
可以使用 1 + 1 、2+2之类的来计算,需要注意的是,如果直接使用 10/3 得到的将是3, 要想得到 3.3333 需要使用 10.0 /3 或者 10/3.0
循环:
最简单的循环实现代码如下:
1 10.times do print " hello" end #表示循环10次打印 " hello"
2 # 这里使用了 Fixnum对象的times方法
定义类:
1 class Person
2 attr_accessor :name, :age, :gender # 定义属性
3 end
定义完类之后,就可以进行实例化了: person = Person.new person.name = "KiDe" person.age = 25 person.gender = "male" ruby当然和其他面向对象的编程语言一样也支持继承,继承的使用通过 < 来实现:
1 class NewPerson < Person
2 attr_accessor :health
3 end
此时该新的类拥有前面的类的所有属性并且多了一个叫health的属性 Ruby可以很轻松的对类进行扩展(即使是内置的类):
1 class Person
2 def greeting
3 puts "Hello " + self.name
4 end
5 end
PS:在ruby中这不会覆盖原来person的定义,相反只是在原来person的定义之上增加了一个方法,这样Person类和其子类都可以调用该方法。当然如果子类对新增的方法进行复写,那么就形成了多态。
一切皆是对象: 可以通过 puts person.class puts 1.class 来查看所有数据类型所属的对象类型
1 puts 1.class #Fixnum
2 puts "a".class # String
Kernel模块的方法: Kernel是个特殊的类,他的方法在ruby的每个类和范围中都有效,其中前面用到的 puts 和 print方法都属于该类。 我们也可以使用 Kernel.puts 来进行输出 ,当ruby发现方法的调用方为空的时候就会去Kernel模块去找。
向方法中传入参数: 对于puts这种只有一个参数的方法,可以直接通过 puts "Hello " 将要传入的参数直接放到方法后面,但当方法有多个参数的时候,建议使用括号。
使用字符串的常见方法:
1 "test" + "test" # testtest
2 "test".capitalize # Test
3 "Test".downcase # test
4 "Test".chop # Tes (去掉最后一个字符)
5 "Test".hash # -98625764
6 "Test".next # Tesu
7 "Test".reverse # tseT
8 "Test".sum # 416
9 "Test".swapcase # tEST
10 "Test".upcase # TEST
所有方法都返回一个新的String对象,所以支持链式调用。
以非面向对象的方式使用Ruby: 可以直接在main函数中定义一个新的方法,然后直接调用。这个调用的时候是没有带任何对象的。其实该方法也属于Kernel对象。也可以通过Kernel. 调用:
1 def myPrint(value)
2 print "This is myPrint:" + value
3 end
4
5 # 可以通过下面的方式进行调用:
6 myPrint("Haha")
7 Kernel.myPrint("Haha")
通过Kernel.methods 可以得到 Kernel的所有方法,里面可以看到有 :myPrint 的签名。
- Java并发学习之线程状态及Thread常用方法详解
- Java并发学习之四种线程创建方式的实现与对比
- Google protocol buffer简介
- Java反射的使用姿势一览
- [一对一讲什么] 之 测完了接口、搞好了目录,然后做啥?
- Java容器篇小结之List自问自答
- android断点下载
- [一对一讲什么] 之 什么叫切图?
- SpringMVC统一异常处理
- React Native开发之调试
- JavaWeb三大组件之Filter学习详解
- JavaWeb三大组件之Servlet学习
- Android App瘦身实战
- [先行者周末课程] 日历组件的开发思路讲解&&日历组件在实际工作中的使用方式
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 3种方式限制ip访问Oracle数据库
- 服务发现之consul的介绍、部署和使用
- Mybatis处理查询map 为null 导致查询map无该key对象
- 深入对比TOML,JSON和YAML
- consul配置参数大全、详解、总结
- 跳跃表原理和实现
- 你动、蒙娜丽莎跟着一起动,OpenCV这么用,表情口型造假更难防了
- 好用的PHP高性能多并发restful的HTTP Client
- Golang程序调试工具介绍(gdb vs dlv)
- tcp_tw_reuse、tcp_tw_recycle注意事项
- PHP性能规范
- PHP代码规范
- php调试利器之phpdbg
- 【DB笔试面试860】在Oracle中,如何判断Oracle是32位还是64位?
- JsonPath实践(四)