Ruby
起步
使用irb进入交互式命令行
puts 'hello world'name = 'world'puts "hello #{name}"
编程模型
Ruby 是一门纯面向对象语言
puts 4.class # Integerputs 4.methods
判断
x = 6if x > 5 # singleif puts 'great than 5'endunless x < 5 # logic not puts 'great than 5'else puts 'less than 5'endputs 'hello' if x == 6 # single line ifputs x = x + 1 while x < 10 # single line while
除了nil和false之外 其他值都代表true
puts 'hello' && true # true
ruby的逻辑运算可以为and or 或者 && ||
puts true && false # falseputs true and false # true
类型
Ruby是强类型语言 会对某些操作进行类型检查 Ruby是在运行时才检查
puts 4 + 'hello'
函数
def say_sth puts 'bark'endsay_sth
数组
list = [1,2,3,4]puts list[0]puts list[-1] # desc order firstputs list[0..-1] # 0-endlist.push(5)puts list.poplist[10] = [1,2,3]
散列表
map = {1 => 'cxk', 2 => 'k'}puts map[1]map = {:string => 'string', :array => 'array'} # symbol 表示一种特殊对象puts map[:string]puts map[:array]
代码块与yield
代码块就是一个匿名函数
3.times {puts 'hello world'} # 传给times一个代码块3.times {|i| puts i} # 传给代码块一个参数i
使用yield实现:
def f i = 0 while i < 10 i = i + 1 yield endendf {puts 'ddd'}def condition_yeild i = 0 while i < 10 i = i + 1 yield if i > 5 # 条件执行 endendcondition_yeild {puts 'ddd'}
类
class Animal attr_accessor :name def initialize(name) @name = name endenddog = Animal.new('dog')puts dog.name
method_mission方法 当调用的方法找不到 该方法会被调用
class Man def self.method_missing name, *args puts "oh, no such method:${name}" endendputs Man.go
Mixin
通过混入模块的方式隐式实现一些功能
module Human def go puts 'gogogo' endendclass Person include Humanendp = Person.newp.go
集合的可枚举 可比较
list = [1,2,3,4,5]puts list.sortputs list.any? {|i| i> 6}puts list.all? {|i| i> 6}puts list.collect {|i| i * 2} # 对每一元素进行此操作puts list.select {|i| i > 2} # 收集符合这个条件的元素puts list.member?(2) # 存在一个2puts list.inject {|sum,i| sum * i} # 求乘积
应用场景
- 脚本
- web开发
不足
- 性能
- 并发与OOP
- 类型安全