初识Ruby

2017-05-28  本文已影响53人  狂猿

ruby简介

Ruby 是一种开源的面向对象程序设计的服务器端脚本语言

$ brew install ruby
$ ruby -v    # 查看ruby版本

我们可以在终端中测试ruby

#打开终端,输入irb
$ irb 
 > puts(1+2)
3
 => nil 
> # 可以在这里做一些简单的ruby测试,建议还是创建.rb文件,便于代码保存

Ruby 数据类型

Ruby支持的数据类型包括基本的Number、String、Ranges、Symbols,以及true、false和nil这几个特殊值,同时还有两种重要的数据结构——Array和Hash。

Ruby判断真值时

只有 false 和 nil 当做假值。其余一切皆为真(包括 0、 0.0、 "" 和 [])

Ruby 方法

#方法定义
# 1
def func
end
# 2 
def func2(var1, var2)
end
# 3. 可变参数
def func3(*args)
end
# 方法调用
func1
func2(v1, v2) 
func2 v1, v2
  • 方法名有?通常意味着方法返回boolean型结果

Ruby 中的==和equals

Ruby 对 == 和 equals() 的处理方式与 Java 不一样。测试相等性使用 ==(Java 中是 equals())。测试是否为同一对象使用 equals?()(Java 中是 ==)

Ruby 中定义类

# 定义
class Customer
    # 实例方法
   def getX
      @width * @height
   end
end

new 方法创建对象

对象是类的实例。现在您将学习如何在 Ruby 中创建类的对象。在 Ruby 中可以使用类方法 new 创建对象。
方法 new 是一种独特的方法,在 Ruby 库中预定义。new 方法属于类方法。

自定义方法来创建 Ruby 对象

还可以给方法 new 传递参数,这些参数可用于初始化类变量。
当您想要声明带参数的 new 方法时,您需要在创建类的同时声明方法 initialize。
initialize 方法是一种特殊类型的方法,将在调用带参数的类的 new 方法时执行。
下面的实例创建了 initialize 方法:

class Customer
   @@no_of_customers=0
   def initialize(id, name, addr)
      @cust_id=id
      @cust_name=name
      @cust_addr=addr
   end
end

self

方法前的self在class内部,所以它表示类A,这样,x方法的调用者是类A自身(而不是它的实例),根据之前的原则,在def关键字内部,self表示的是这个方法的调用者,在这里就是类A自己

类的继承

class Customer < Parent # 使用 <表示继承关系
end

访问控制

Ruby 为您提供了三个级别的实例方法保护,分别是 public、private 或 protected。Ruby 不在实例和类变量上应用任何访问控制。

Ruby 模块(Module)

模块(Module)是一种把方法、类和常量组合在一起的方式。模块(Module)为您提供了两大好处。

模块(Module)定义了一个命名空间,相当于一个沙盒,在里边您的方法和常量不会与其他地方的方法常量冲突。
模块类似与类,但有一下不同:

## 基本结构
module Identifier
   statement1
   statement2
   ...........
end

在类中嵌入模块使用 include 语句:

#demo 定义一个module
module Week
   FIRST_DAY = "Sunday"
   def Week.weeks_in_month
      puts "You have four weeks in a month"
   end
   def Week.weeks_in_year
      puts "You have 52 weeks in a year"
   end
end

#在类中引用上面定义的module
class Decade
   include Week # 使用include引用module
   def no_of_months
      puts Week::FIRST_DAY
      number=10*12
      puts number
   end
end

d1=Decade.new  # 创建一个对象
puts Week::FIRST_DAY # 调用模块中的常量
Week.weeks_in_month
Week.weeks_in_year
d1.no_of_months # ok
d1.weeks_in_month # ok

class是使用<作为继承的关键字,只支持单继承;module是使用include来做实例继承(实例化的时候动态功能插入),extend做类继承(可以理解为static继承)

Class Module
能否初始化 不能
用途 定义和新建对象 namespace,mixin
父类 Module Object
继承 能继承与被继承 不能
inclusion 不能 可以用 include 在class和module里
extension 不能 可以用 extend 在class和module里
包含函数 Class函数和实例函数 Module函数和实例函数
# 使用extends
#在类中引用上面定义的module
class Decade
   extend Week # 使用extend引用module
   def no_of_months
      puts Week::FIRST_DAY
      number=10*12
      puts number
   end
end

## 调用
Decade.weeks_in_month
Decade.weeks_in_year

参考

Ruby 迭代器

迭代(iterate)指的是重复做相同的事,所以迭代器(iterator)就是用来重复多次相同的事。迭代器是集合支持的方法,在 Ruby 中,数组(Array)和哈希(Hash)可以称之为集合。

collection.each do |variable|
   code
end

# demo 遍历数组
ary = [1,2,3,4,5]
ary.each do |i|
   puts i
end

Ruby 块

您已经知道 Ruby 如何定义方法以及您如何调用方法。类似地,Ruby 有一个块的概念。

def test
   puts "在 test 方法内"
   yield
   puts "你又回到了 test 方法内"
   yield
end
test {puts "你在块内"}

关于block,这里不再详细介绍,下一节将详细分析Proc、lambda

以上为ruby的部分基本概念,详细介绍待续。。。

上一篇 下一篇

猜你喜欢

热点阅读