1月5日 对象Object, 含过去看的英文档的总结链接

Object 也是一种数据类型,可以有属性,有method.

反之,在Ruby中,每一种数据类型都是Object。如String,Integer,Float,Array,Hash.

 IN Ruby everything is a object!

http://chentianwei-blog.logdown.com/posts/1534325 

http://chentianwei-blog.logdown.com/posts/1534244 

 

 

Class定义Object

Class就像是模具板,定义了同一种类型的Object有哪些共同的attribute和method. 

Ruby defines the attributes and behaviors of its objects in classes. 

class Car
attr_accessor :color # 这会定义属性 @color
def run
puts "This #{@color} car is running"
end
end

可以用new 来产生实例对象 。例子:

car1 = Car.new

car1.color = "red" 

car1.run  

 

内建类 

刚刚说过在Ruby 中,每种数据类型都是对象Object。他们都是从类种产生出来的:

"foobar".class 会回传 String 是个类

String.new("foobar") 等同于 "foobar"

不过由于这些数据太常见,使用太频繁,就不用 .new来产生,直接用符号表示了。 

 

常数Constant

在Ruby 中,大写开头的变量叫常数,🈯️ 这个数值固定不变。例如:

STATUS = ["pending", "confirmed"]

Pi = 3.1415926

所有的Class类都是一种常数,所以命名的时候用大写开头。 

 

 

题目 27

请自订一个 Person 对象,属性有 first_namelast_name,然后定义一个方法是 greet 会输出 "Hi, <first_name> <last_name>" 

class Person
  attr_accessor :first_name, :last_name
  def greet
    puts "Hello, #{first_name} #{last_name}"
  end 
end

 

p1 = Person.new
p1.first_name = "Peter"
p1.last_name = "Wang"
p1.greet # 输出 "Hello, Peter Wang"

 

如果要在实例对象的时候,就传入实例变量,p1 = Person.new("王明") ,则必须使用 initialize(..) method

在👆的例子中,需要在 attr_accessor :first_name, :last_name👇 增加这个method:

 

class Person
  attr_accessor :first_name, :last_name
  def initialize(first, last)
     @first_name = first
     @last_name  = last
  end
  def greet
    puts "Hello, #{first_name} #{last_name}"
  end
end

 

p3 = Person.new("王", "明")
p3.first_name
p3.last_name
p3.greet

⚠️ :实例化对象的时候,就必须加入参数了,否则会报错 

❌ :in `initialize': wrong number of arguments (given 0, expected 2) 

 

posted @ 2018-01-05 09:35  Mr-chen  阅读(172)  评论(0编辑  收藏  举报