Ruby方法与任何其他编程语言中的函数非常相似. Ruby方法用于将一个或多个可重复语句捆绑到一个单元中.
方法名称应以小写字母开头.如果您使用大写字母开始一个方法名称,Ruby可能会认为它是一个常量,因此可以错误地解析调用.
在调用它们之前应该定义方法,否则Ruby会引发未定义方法调用的例外.
def method_name [( [arg [= default]]...[, * arg [, &expr ]])] expr.. end
所以,你可以定义一个简单的方法如下 :
def method_name expr.. end
你可以表示一个接受像这样的参数的方法;
def method_name (var1, var2) expr.. end
您可以设置参数的默认值,如果调用方法,将使用这些参数传递所需参数 :
def method_name (var1 = value1, var2 = value2) expr.. end
每当调用简单方法时,只写入方法名称为跟随 :
method_name
然而,当你调用一个方法时使用参数,您可以编写方法名称以及参数,例如 :
method_name 25,30
使用带参数的方法最重要的缺点是,无论何时调用这些方法,都需要记住参数的数量.例如,如果一个方法接受三个参数并且只传递两个参数,则Ruby会显示错误.
#!/usr/bin/ruby def test(a1 = "Ruby", a2 = "Perl") puts "The programming language is #{a1}" puts "The programming language is #{a2}" end test "C", "C++" test
这将产生以下结果 :
The programming language is C The programming language is C++ The programming language is Ruby The programming language is Perl
Ruby中的每个方法都默认返回一个值.此返回值将是最后一个语句的值.例如 :
def test i = 100 j = 10 k = 0 end
此方法在调用时将返回最后声明的变量 k .
ruby中的 return 语句用于从Ruby方法返回一个或多个值.
return [expr[`,' expr...]]
如果给出两个以上的表达式,则包含这些值的数组将是返回值.如果没有给出表达式,则nil将是返回值.
return OR return 12 OR return 1,2,3
看一下这个例子 :
#!/usr/bin/ruby def test i = 100 j = 200 k = 300 return i, j, k end var = test puts var
这将产生以下结果 :
100 200 300
假设您声明了一个方法有两个参数,每当你调用这个方法时,你需要传递两个参数.
但是,Ruby允许你声明使用vari的方法有多少参数.让我们检查一下这个&minus的样本;
#!/usr/bin/ruby def sample (*test) puts "The number of parameters is #{test.length}" for i in 0...test.length puts "The parameters are #{test[i]}" end end sample "Zara", "6", "F" sample "Mac", "36", "M", "MCA"
在此代码中,您已声明了一个接受一个参数测试的方法示例.但是,此参数是可变参数.这意味着此参数可以包含任意数量的变量.因此,上面的代码将产生以下结果 :
The number of parameters is 3 The parameters are Zara The parameters are 6 The parameters are F The number of parameters is 4 The parameters are Mac The parameters are 36 The parameters are M The parameters are MCA
当在类定义之外定义方法时,方法是默认情况下标记为 private .另一方面,类定义中定义的方法默认标记为public.方法的默认可见性和私有标记可以通过模块的 public 或 private 进行更改.
每当您想要访问类的方法时,首先需要实例化该类.然后,使用该对象,您可以访问该类的任何成员.
Ruby为您提供了一种在不实例化类的情况下访问方法的方法.让我们看看如何声明和访问类方法&减去;
class Accounts def reading_charge end def Accounts.return_date end end
了解如何声明return_date方法.它声明为类名后跟一个句点,后跟方法的名称.您可以直接访问此类方法,如下所示;
Accounts.return_date
要访问此方法,您无需创建Account类的对象.
这为方法或全局提供了别名变量.别名不能在方法体内定义.该方法的别名保留了方法的当前定义,即使重写方法也是如此.
为编号的全局变量创建别名($ 1,$ 2,...)被禁止.覆盖内置全局变量可能会导致严重问题.
alias method-name method-name alias global-variable-name global-variable-name
alias foo bar alias $MATCH $&
这里我们为bar和&dollar定义了foo别名; MATCH是&dollar的别名;&
这将取消方法定义. undef 不能出现在方法体中.
通过使用 undef 和别名,界面该类可以独立于超类修改,但请注意它可能是通过内部方法调用self来破坏程序.
undef method-name
取消定义名为的方法bar 执行以下操作 :
undef bar