文章目录
类
定义
class 类名称
end
创建对象
new
自定义初始化构造器
class Box
def initialize(w, h)
@width = w
@height = h
end
end
obj = Box.new(100 ,200)
变量
局部变量
- 局部变量是在
方法中
定义的变量。 - 局部变量在
方法外
是不可用的。 - 局部变量以
小写字母
或_
开始。
实例变量 @
- 实例变量在
变量名之前
放置符号@
。 - 未初始化的实例变量的值为 ni
class Person
def initialize(name, height)
@person_name = name
@person_height = height
end
def show_detail
puts "person_name : #@person_name"
puts "person_height : #@person_height"
end
end
per1 = Person.new("jack", 100)
per1.show_detail
类变量 @@
- 类变量属于类,且是类的一个属性。
- 类变量在变量名之前放置符号
@@
。 - 类变量不能跨类使用
- 且必须初始化后才能在方法定义中使用。引用一个未初始化的类变量会产生错误。
- 类变量在定义它的类或模块的子类或子模块中可共享使用。
class Person
@@total_person=100
def initialize(name, height)
@person_name = name
@person_height = height
end
def show_detail
puts "person_name : #@person_name"
puts "person_height : #@person_height"
end
def show_total
puts "total_person : #@@total_person"
end
end
per1 = Person.new("jack", 100)
per1.show_total
全局变量 $
- 可以跨类使用的变量,您需要定义全局变量。
- 全局变量总是以美元符号
$
开始。 - 未初始化的全局变量的值为 nil
$global_var = 100
print $global_var
# 输出 100
常量 大写字母开头:Constant
class Person
VAR1 = 100
VAR2 = 200
def show
puts "第一个常量的值为 #{VAR1}"
puts "第二个常量的值为 #{VAR2}"
end
end
per1 = Person.new
per1.show
输出
第一个常量的值为 100
第二个常量的值为 200
伪变量
它们是特殊的变量,有着局部变量的外观,但行为却像常量。
不能给这些变量赋任何值。
self
: 当前方法的接收器对象。true
: 代表true
的值。false
: 代表false
的值。nil
: 代表undefined
的值。__FILE__
: 当前源文件的名称。__LINE__
: 当前行在源文件中的编号。
函数/方法 def
- 方法名应以
小写字母开头
。 - 如果以大写字母作为方法名的开头,Ruby 可能会把它当作常量,从而导致不正确地解析调用。
- 方法应在调用之前定义,否则 Ruby 会产生未定义的方法调用异常。
定义
def 方法名称
statement 1
statement 2
end
例子
class Person
def hello
puts "Hello Ruby!"
end
end
obj = Person.new
obj.hello
# 输出 Hello Ruby!
定义
完整的
def method_name [( [arg [= default]]...[, * arg [, &expr ]])]
expr..
end
没有参数的方法
调用:直接使用方法名称 method_name
def method_name
expr..
end
有参数的方法
调用:方法名称加上参数 method_name 25, 30
def method_name (var1, var2)
expr..
end
给参数设定默认值
def method_name (var1=value1, var2=value2)
expr..
end
返回值
- 可以返回一个参数,
- 也可以返回多个参数,用数组存放返回值
def test
i = 100
j = 200
k = 300
return i, j, k
end
var = test
puts var
输出
100
200
300
类方法
类方法的声明和访问
def 类名称.方法名称
puts "return_date ===="
end
- 例子
class Accounts
def reading_charge
puts "reading_charge ===="
end
def Accounts.return_date
puts "return_date ===="
end
end
obj = Accounts.new
obj.reading_charge
Accounts.return_date
输出
reading_charge ====
return_date ====
getter 和 setter
class Person
# 初始化构造器
def initialize(name, height)
@person_name = name
@person_height = height
end
# getter 方法
def get_name
@person_name
end
# setter 方法
def set_name=(value)
@person_name = value
end
# 定义方法
def show_detail
puts "person_name : #{@person_name}"
puts "person_height : #{@person_height}"
end
end
obj = Person.new("jack", 100)
puts obj.get_name
obj.set_name = "new name"
puts obj.get_name
jack
new name
to_s 方法
对象的字符串表示
没有重写to_s
#<Person:0x00007fdf450faf88>
重写to_s
class Person
# 初始化构造器
def initialize(name, height)
@person_name = name
@person_height = height
end
def to_s
"#{@person_name} #{@person_height}"
end
end
obj = Person.new("jack", 100)
puts obj.to_s
jack 100
访问控制
Public
: Public 方法可被任意对象调用。- 默认情况下:
- 方法都是 public 的,
- 除了 initialize 方法总是 private 的。
- 默认情况下:
Private
: Private 方法不能从类外部
访问或查看。只有类方法
可以访问私有成员。Protected
: Protected 方法只能被类及其子类
的对象调用。访问也只能在类及其子类内部进行。
类的继承
格式
class 子类 < 父类
end