1.7Ruby语言的方法(Method)

1.方法定义

1.1方法声明

方法声明不是对象,更不是 Method 类的对象。

注意:在没有歧义的情况下,形参外围的圆括号 () 可以被省略。

def 方法名(值形参名, 默认值形参名 = 默认值, 关键字形参名:, 默认关键字形参名: 默认值, *数组形参名, **哈希形参名, &块形参名)
  #方法体
end

1.2块

块不是对象,更不是 Proc 类的对象。

注意:块必须与方法调用表达式关联使用,不可以单独使用。

注意:一般情况下,单行使用花括号 {} 方式,多行使用 do/end 方式。

方法名() {|形参名; 块局部变量| 块体 }
方法名() do |形参名; 块局部变量|
  #块体
end

1.3lambda

创建 Proc 类的对象有两种方式:lambdaproc

lambda 的行为与方法类似。

#lambda字面量创建方式
#有形参
p = ->(形参名; 块局部变量) { 块体 }
#无形参
p = ->{ 块体 }

#lambda方法调用表达式创建方式
p = lambda {|形参名; 块局部变量| 块体 }

1.4proc

proc 的行为与块类似。

#new()方法创建方式
p = Proc.new {|形参名; 块局部变量| 块体 }

#proc方法调用表达式创建方式
p = proc {|形参名; 块局部变量| 块体 }

1.5方法名

方法名描述
方法名?一般情况下,以问号 ? 结尾的方法表示此方法的返回值为 truefalse
方法名!一般情况下,以感叹号 ! 结尾的方法表示此方法会直接在接收者上操作。而不以感叹号 ! 结尾的方法则在接收者的副本上操作。
方法名=一般情况下,以等号 = 结尾的方法表示此方法为 setter 实例访问器属性。

2.方法作用域

注意:Ruby 语言不支持局部方法。

#全局方法
def f()
end

3.方法引用表达式

method(:方法名)

4.形参分类

注意:在方法体调用数组形参时,数组形参名的前面无 *

注意:在方法体调用哈希形参时,哈希形参名的前面无 **

注意:在方法体调用块形参时,块形参名的前面无 &

名称描述
值形参按位置传递
默认值形参按位置传递
关键字形参按关键字传递
默认关键字形参按关键字传递
*数组形参用于收集多余的位置实参
**哈希形参用于收集多余的关键字实参
&块形参用于接收块实参

5.方法调用表达式

注意:如果接收者被省略,则接收者为 self

注意:在没有歧义的情况下,实参外围的圆括号 () 可以被省略。

接收者.方法名()

实参的传递不仅支持按位置传递方式,还支持按关键字传递方式。

#按位置传递方式
方法名(实参)

#按关键字传递方式
方法名(形参名: 实参值)

6.返回值

参考 return 语句。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/ruby/rubylang/37419.html

(0)
huoxiaoqiang的头像huoxiaoqiang
上一篇 2025年3月7日 00:29
下一篇 2025年3月7日 19:39

相关推荐

  • 2.5Ruby类型之数组(Array)

    数组的索引是整数类型。 数组的索引是有序的。 数组的元素可以是任何 Ruby 数据类型,且不必都是同一个类型。 数组的元素的个数(长度)可以动态改变,可以添加、更改、删除元素。 数组的元素可以重复。 1.数组声明 2.访问数组 3.数组长度 注意:length 是只读属性。

    Ruby语言教程 2025年5月5日
    0230
  • 2.3Ruby类型之字符串(String)

    1.单引号字符串字面量 单引号字符串字面量只支持 \\、\’ 转义序列。 单引号字符串字面量不支持字符串插值。 单引号字符串字面量支持隐式的换行符。 2.双引号字符串字面量 双引号字符串字面量支持所有转义序列。 双引号字符串字面量支持字符串插值。 双引号字符串字面量支持隐式的换行符。 3.访问字符串 4.字符串长度 注…

    Ruby语言教程 2025年5月3日
    0250
  • 1.6Ruby语言的常量(Constant)

    1.常量声明 常量在赋值后可以通过重新赋值更改其值,会报错。 如果一个常量存储的是对象的引用,意味着此常量必须总是引用同一个对象。例如,改变数组的元素是可以的。 2.常量作用域 注意:Ruby 语言不支持局部常量。 3.常量引用表达式

    Ruby语言教程 2025年3月6日
    0230

发表回复

登录后才能评论