1.方法定义
1.1方法声明
方法声明不是对象,更不是 Method
类的对象。
注意:形参外围的圆括号 ()
是可选的。
def 方法名(值形参名, 默认值形参名 = 默认值, 关键字形参名:, 默认关键字形参名: 默认值, *数组形参名, **哈希形参名, &块形参名)
#方法体
end
1.2块
块是语句,不是表达式,需与方法调用表达式关联使用,不可单独使用。
块不是对象,更不是 Proc
类的对象。
注意:一般情况下,块单行时,使用花括号 {}
方式,块多行时,使用 do/end
方式。
接收者.方法名() {|块内形参名| 块体 }
接收者.方法名() do |块内形参名|
#块体
end
1.3lambda
可以创建 Proc
类的对象来表示块,创建Proc
类的对象有两种方式:lambda
和 proc
。
lambda
的行为与方法类似,proc
的行为与块类似。
#lambda方法调用表达式创建方式
o = lambda {|块内形参名| 块体 }
#lambda字面量表达式创建方式
#注意:形参外围的圆括号()是可选的。
o = ->(形参名) { 块体 }
1.4proc
#proc方法调用表达式创建方式
o = Proc.new {|块内形参名| 块体 }
#Proc.new可简写为proc
o = proc {|块内形参名| 块体 }
proc
的另外一种创建方式:详见“运算符”-“&
运算符”章节。
1.5带符号的方法名
方法名 | 描述 |
snake_case? | 一般情况下,表示此方法的返回值的类型为布尔类型。 |
snake_case! | 一般情况下,表示此方法的不带感叹号版本会在对象的拷贝上操作,而此方法的带感叹号版本则是在对象本身上操作,所以调用此方法的感叹号版本时需要多加小心。 |
snake_case= | 一般情况下,表示此方法是 setter 访问器属性。 |
2.方法作用域
#全局方法
def f()
end
def f1()
#局部方法
def f2()
end
end
3.方法引用表达式
method(:f)
4.形参分类
注意:在方法体调用数组形参时,数组形参名的前面无 *
。
注意:在方法体调用哈希形参时,数组形参名的前面无 **
。
注意:在方法体调用块形参时,块形参名的前面无 &
。
名称 | 描述 |
值形参 | 按位置传递 |
默认值形参 | 按位置传递 |
关键字形参 | 按关键字传递 |
默认关键字形参 | 按关键字传递 |
* 数组形参 | 用于收集多余的位置实参 |
** 哈希形参 | 用于收集多余的关键字实参 |
& 块形参 | 用于接收块实参 |
5.方法调用表达式
带块的方法调用表达式,详见“块”章节。
注意:如果省略了接收者,则接收者为 self
。
注意:实参外围的圆括号 ()
是可选的。
接收者.方法名()
实参的传递不仅支持按位置传递方式,还支持按关键字传递方式。
#按位置传递方式
接收者.方法名(实参)
#按关键字传递方式
接收者.方法名(形参名: 实参值)
6.返回值
参考 return
语句。
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/ruby/rubylang/36155.html