ruby学习笔记2
- 构造方法initialize
Ruby创建对象时通过Ruby.new方法,若传递参数实际上是传递给了initialize方法
class Test
def initialize(name,age,phone)
@name = name
@age = age
@phone = phone
end
end
调用:Test.new('zhangsan',20,'18112345678')
也可以给参数添加默认值
class Test
def initialize(name='kk',age=18,phone='18112345678')
@name = name
@age = age
@phone = phone
end
end
调用:
test = Test.new
p test
输出
#<Test:0x000001023a2fe8 @name="kk", @age=18, @phone="18112345678">
没有给默认值的参数必传,否则报错。若只有部分参数给了默认值,在调用的时候只传递了未有默认值的参数,会依序赋值。
class Test
def initialize(name,age=18,phone)
@name = name
@age = age
@phone = phone
end
end
调用:
p Test.new('kk','18112345678')
输出:
#<Test:0x0000010208e7a8 @name="kk", @age=18, @phone="18112345678">
2、to_s方法,inspect方法
to_s类似java中的toString,默认输出对象名及内存ID,可以重写。
重写之前调用:Test.new.to_s
输出:
#<Test:0x00000101cc5630>
重写:
class Test
def initialize(name='kk',age=18,phone='18112345678')
@name = name
@age = age
@phone = phone
end
def to_s
"myname is #{@name} , #{@age} years old, telphone:#@phone.please call me latter!"
end
end
调用:
Test.new.to_s
Test.new.inspect
输出:
myname is kk , 18 years old, telphone:18112345678.please call me latter!
#<Test:0x000001024d3c78 @name="kk", @age=18, @phone="18112345678">
3、print、puts、p与to_s、inspect的关联
user = Test.new
print user -------> 将调用输出user.to_s
puts user -------> 将调用输出user.to_s
p user -------> 将调用输出user.inspect