详解Ruby中的方法概念
技术  /  管理员 发布于 5年前   307
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/rubydef test(a1="Ruby", a2="Perl") puts "The programming language is #{a1}" puts "The programming language is #{a2}"endtest "C", "C++"test
这将产生以下结果:
The programming language is CThe programming language is C++The programming language is RubyThe programming language is Perl
从方法中返回值:
在Ruby中的每一个方法返回默认值。这个返回值将是最后一个语句的值。例如:
def test i = 100 j = 10 k = 0end
此方法被调用时,将返回的最后声明的变量k的值。
Ruby return 语句:
Ruby的return语句用于从一个Ruby方法返回一个或多个值。
语法:
复制代码 代码如下:return [expr[`,' expr...]]
如果有两个以上的表达式给出,数组包含这些值将返回值。如果没有表达式,将会是nil值返回。
实例:
复制代码 代码如下:return
OR
return 12
OR
return 1,2,3
看看这个例子:
#!/usr/bin/rubydef test i = 100 j = 200 k = 300return i, j, kendvar = testputs var
这将产生以下结果:
100200300
可变数目的参数:
假设声明一个方法需要两个参数。每当你调用这个方法,需要随着它传递两个参数。
但是Ruby允许声明与可变数目的参数的方法。让我们来看看这一个示例:
#!/usr/bin/rubydef sample (*test) puts "The number of parameters is #{test.length}" for i in 0...test.length puts "The parameters are #{test[i]}" endendsample "Zara", "6", "F"sample "Mac", "36", "M", "MCA"
在这段代码中,已经声明接受一个参数测试方法示例。但是,这个参数是一个可变参数。这意味着,这个参数可以在任意数量的变量。所以上面的代码将产生以下结果:
The number of parameters is 3The parameters are ZaraThe parameters are 6The parameters are FThe number of parameters is 4The parameters are MacThe parameters are 36The parameters are MThe parameters are MCA
类方法:
类定义之外定义一个方法时,该方法被默认标记为私有。另一方面,在类定义中定义的方为默认标示公有。可以改变默认可视性和私有标记的方法,由公共或私有的模块。
每当想访问一个类的方法,首先需要实例化的类。然后,使用对象可以访问任何类的成员。
Ruby提供了一种方法来访问的方法,没有实例化一个类。让我们来看看如何声明一个类的方法和访问:
class Accounts def reading_charge end def Accounts.return_date endend
看看方法return_date声明。声明随后的一个时期,这是其次的方法名与类名。可以直接访问这个类的方法如下:
Accounts.return_date
要使用这种方法,不需要创建对象之类的帐户。
Ruby alias 语句:
方法或全局变量的别名。别名不能被定义在方法体。方法aliase保持当前定义的方法,即使方法是覆盖。
为全局变量($ 1,$ 2,...)的取别名是禁止。覆盖内置的全局变量,可能导致严重的问题。
语法:
alias method-name method-namealias global-variable-name global-variable-name
例如:
alias foo baralias $MATCH $&
这里我们定义了foo的别名bar和$MATCH函数的别名$&
Ruby undef 语句:
这取消的方法定义。一个是undef不能出现在方法体中。
通过使用 undef 和 alias, 可以从超类独立修改类的接口,但注意到这可能被打破程序由内部自行的方法调用。
语法:
复制代码 代码如下:undef method-name
实例:
取消定义bar方法,如下:
undef bar
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号