Ruby 中的方法 ( method ) 参数浅谈 ( 下 )

yufei       5 年, 8 月 前       793

人的健忘症有时候发作起来,真是天可怜见。在 Ruby 中的方法 ( method ) 参数浅谈 ( 上 ) 我们介绍了 Ruby 方法参数的一些情况。包括不带参数的方法、带参数的方法、带参数具有默认值的方法、参数长度可变的方法等等。

但,我们还是漏讲了 「 关键字参数 」 和 「 块即是参数 」两个重要的概念。

关键字参数 ( keyword arguments )

「 关键字参数 」 是 「 位置参数 」 的替代方法。它们非常类似于将哈希 ( hash ) 传递给方法,但具有更明确的错误

为了理解这个 关键字参数,我们使用一个示例来演示下

def method_with_keyword_arguments(foo: 'bar')
  "foo is #{foo}"
end
irb> method_with_keyword_arguments foo: 'naughty'
 => "foo is naughty"
irb> method_with_keyword_arguments
 => "foo is bar"

上面的代码中,调用 method_with_keyword_arguments 方法需要传递关键字参数 foo ,否则,如果不传递的话,就会使用默认值 'bar'

因为定义了默认值,所以也可以不传递 foo ,下面的代码,我们去掉了默认值

def method_with_required_ka(foo:)
  "foo is #{foo}"
end
irb> method_with_required_ka foo: 'naughty'
 => "foo is naughty"
irb> method_with_required_ka
ArgumentError (missing keyword: foo)

因为去掉了默认值,所以 foo 参数变成了必传的。否则会抛出一个异常 ArgumentError

块即是参数

如果我们定义方法时给参数前面添加符号 &,那么该参数就可以接受一个 块 作为实参。

Ruby 会自动把块的内容存储在 Proc 的实例中,并将该实例传递给以 & 为前缀的参数

def method_with_block &blk
  p blk.class
  blk.call
end
irb> method_with_block { puts 'a block' }
Proc
a block
 => nil

上面的代码中,我们可以看到 blkProc 的一个实例,调用 blk.call 就和调用 yield 是一样的。

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.