1.7Ruby语言的方法(Method)

1.方法定义

1.1方法声明

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

注意:形参外围的圆括号 () 是可选的。

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

1.2块

块是语句,不是表达式,需与方法调用表达式关联使用,不可单独使用。

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

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

接收者.方法名() {|块内形参名| 块体 }
接收者.方法名() do |块内形参名|
  #块体
end

1.3lambda

可以创建 Proc 类的对象来表示块,创建Proc 类的对象有两种方式:lambdaproc

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

(0)
huoxiaoqiang的头像huoxiaoqiang
上一篇 2025年2月7日 14:33
下一篇 2025年2月8日 17:00

相关推荐

  • 1.1Ruby语言的注释(Comment)

    1.行内(Inline)注释 2.块(Block)注释

    Ruby语言教程 2025年2月1日
    0410
  • 1.4Ruby语言的类型(Type)

    1.整数(Integer)类型 类型 范围 Integer 任意精度 进制 描述 二进制 以 0b(零和小写字母b) 或 0B(零和大写字母B) 开头,后续只能包含数字 0 和 1。 八进制 以 0(零) 或 0o(零和小写字母o) 或 0O(零和大写字母O) 开头,后续只能包含数字(0~…

    Ruby语言教程 2025年2月4日
    0450
  • 2.1Ruby语言的模块(Module)

    1.模块声明 支持的成员:类方法、实例访问器属性、实例方法,不支持构造方法。 模块声明是 Module 类的对象,模块名就是存储这个实例的常量,因此在赋值后不可以通过重新赋值更改其值。 2.访问成员 3.include()方法 include() 方法支持的模块成员:实例访问器属性、实例方法、构造方法,不支持类方法。 …

    Ruby语言教程 2025年3月1日
    0320

发表回复

登录后才能评论