`根据接收者种类的不同, Ruby 的方法可分为以下3类.
- 实例方法
- 类方法
- 函数式方法
实例方法
实例方法是最常用的方法. 假设有一个对象(实例), 那么以这个对象为接收者的方法就称为实例方法
.
实例:
"10, 20, 30, 40".split(",") #=> ["10", " 20", " 30", " 40"]
[10, 20, 30].index(20) #=> 1
1000.to_s #=> "1000"
在上述代码中, 从上到下分别以字符串, 数组, 数值对象为接收者.
调用对象的实例方法后, 程序就会执行对象所属的类中预先定好的处理.
虽然相同名称的方法执行的处理大多都是一样的, 但具体执行的内容则会根据对象类型的不同而存在差异. 例如, 几乎所有的对象都有to_s方法, 这是一个把对象内容以字符串形式输出的方法. 然而, 虽然都是字符串形式, 但在数值对象与时间对象的情况下, 字符串形式以及字符串的创建方法都不一样.
p 10.to_s #=> "10"
p Time.now.to_s #=> "2017-10-20 10:37:45 +0800"
类方法
接收者不是对象而是类本身的方法, 我们称为类方法
. 例如, 我们在创建对象时就是用到了类方法.
Array.new #=> 创建新的数组
File.open("fileName") #=> 创建新的文件对象
Time.now #=> 创建新的 Time 对象
此外, 不直接对实例进行操作, 只是对该实例所属的类进行相关操作时, 也会用到类方法. 例如: 修改文件名时, 就会使用文件类方法.
File.rename(oldName, newName) #=> 修改文件名
类方法也有运算符的形式.
Array[''a", "b", "c", "d"] #=> 创建数组
调用类方法时, 可以使用::
代替.
. 在 Ruby 语法中, 两者所代表的意思是一样的.
函数式方法
没有接收者的方法, 我们称之为函数式方法
.
虽说没有接收者, 但并不表示该方法就真的没有可作为接收者的对象, 只是在函数式方法的情况下, 可以省略而已.
print "hello!" #=> 在命令行输出字符串
sleep(10) #=> 在指定的时间内睡眠, 终止程序
函数式方法的执行结果不会根据接收者而发生变化. 程序在执行 print 方法以及 sleep 方法时, 并不需要知道接收者是谁. 反过来, 不需要接收者的方法就是函数式方法.
网友评论