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

yufei       6 年, 3 月 前       2390

其实吧,我觉得这个主题 「 Ruby 中的方法 ( method ) 参数 」没啥好讲的。不就是 「 不带参数的方法 」、「 带参数的方法 」、「 带具有默认值参数的方法 」、「 参数数量可变的方法 」几大类么 ?

后面想了想,其实作为 Ruby 基础教程: Ruby 方法 的补充,多学习学习,记忆就会更深刻一点。

不带参数的方法

Ruby 中的方法可以没有参数,这些无参数方法在调用的时候也不必传递任何参数

def method_without_arg()
  "without arg"
end
def method_without_arg_and_parentheses
  "without arg & parentheses"
end
irb> method_without_arg
 => "without arg"
irb> method_without_arg()
 => "without arg"
irb> method_without_arg_and_parentheses
 => "without arg & parentheses"
irb> method_without_arg_and_parentheses()
 => "without arg & parentheses"

上面的代码中,我们既没有为方法 method_without_argmethod_without_arg_and_parentheses 定义任何形参,在调用它们的时候也没有传递任何实参

「 形参 」 就是在定义方法时定义的参数列表

「 实参 」 就是在调用方法时给形参传递的实际值

通常,Ruby 程序员更喜欢没有括号 ( 没有参数 ) 的方法。因为,这种无参数方法实际上更 「 适用 」于 Ruby 中的消息处理机制

带参数的方法

从另一方面说,Ruby 也允许在定义方法时添加参数列表,和在调用方法时传递实际的值。

def method_with_args arg1
  "with args: #{arg1}"
end
def method_with_args_and_parentheses(arg1)
  "with args & parentheses: #{arg1}"
end
irb> method_with_args 'an argument'
 => "with args: an argument"
irb> method_with_args('an argument')
 => "with args: an argument"
irb> method_with_args_and_parentheses 'an argument'
 => "with args & parentheses: an argument"
irb> method_with_args_and_parentheses('an argument')
 => "with args & parentheses: an argument"

从上面的代码中可以看到,定义带参数的方法,可以使用小括号 () ,也可以不实用小括号,调用带参数的方法传递实际的值的时候也一样,可以使用小括号,也可以不使用小括号。

当不使用小括号的时候,则必须在 「 方法名 」 和第一个参数之间添加一个 「 空格 」

带具有默认值参数的方法

当我们定义带参数的方法时,可以给参数指定一个默认值,这样,但调用该方法时如果没有传递相应的参数,Ruby 就会使用定义的默认值。

def method_with_default_value(newsletter = 'ruby.devscoop.fr')
  "The Ruby newsletter is #{newsletter}"
end
irb> method_with_default_value 'awesome'
 => "The Ruby newsletter is awesome"
irb> method_with_default_value
 => "The Ruby newsletter is ruby.devscoop.fr"

上面的代码中,当调用 method_with_default_value 方法且没有为参数 newsletter 传递任何值时,就会使用我们定义的默认值 ruby.devscoop.fr,否则就会使用我们传递的值。

可变长度的参数列表的方法

Ruby 支持支持可变长度的参数列表

「 可变长度的参数列表 」的意思是: 在定义方法时并不能明确该方法被调用时会传递多少个参数。

这种情况下,我们会在最末尾的参数前加一个星号 * ,表示该参数接受未定数量的其它实参

def method_with_varargs *names
  puts names.class, "\n"
  names.each {|name| puts name}
end
irb> method_with_varargs 'Mehdi', 'John', 'Sam'
Array
Mehdi
John
Sam

调用时,如果传递的参数多余指定的参数,那么剩余的那些参数都会和前一个参数一起保存到 * 号开头的形参中。

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

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

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