详解Ruby中的方法概念

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语句用于从一个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允许声明与可变数目的参数的方法。让我们来看看这一个示例:

#!/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

类方法:

类定义之外定义一个方法时,该方法被默认标记为私有。另一方面,在类定义中定义的方为默认标示公有。可以改变默认可视性和私有标记的方法,由公共或私有的模块。

每当想访问一个类的方法,首先需要实例化的类。然后,使用对象可以访问任何类的成员。

Ruby提供了一种方法来访问的方法,没有实例化一个类。让我们来看看如何声明一个类的方法和访问:

class Accounts
  def reading_charge
  end
  def Accounts.return_date
  end
end

看看方法return_date声明。声明随后的一个时期,这是其次的方法名与类名。可以直接访问这个类的方法如下:

Accounts.return_date

要使用这种方法,不需要创建对象之类的帐户。
Ruby alias 语句:

方法或全局变量的别名。别名不能被定义在方法体。方法aliase保持当前定义的方法,即使方法是覆盖。

为全局变量($ 1,$ 2,...)的取别名是禁止。覆盖内置的全局变量,可能导致严重的问题。
语法:

alias method-name method-name
alias global-variable-name global-variable-name

例如:

alias foo bar
alias $MATCH $&

这里我们定义了foo的别名bar和$MATCH函数的别名$&
Ruby undef 语句:

这取消的方法定义。一个是undef不能出现在方法体中。

通过使用 undef 和 alias, 可以从超类独立修改类的接口,但注意到这可能被打破程序由内部自行的方法调用。
语法:

代码如下:

undef method-name

实例:

取消定义bar方法,如下:

undef bar
(0)

相关推荐

  • 几个加速Ruby on Rails的编程技巧

    Ruby 语言常以其灵活性为人所称道.正如 Dick Sites 所言,您可以 "为了编程而编程".Ruby on Rails 扩展了核心 Ruby 语言,但正是 Ruby 本身使得这种扩展成为了可能.Ruby on Rails 使用了该语言的灵活性,这样一来,无需太多样板或额外的代码就可以轻松编写高度结构化的程序:无需额外工作,就可以获得大量标准的行为.虽然这种轻松自由的行为并不总是完美的,但毕竟您可以无需太多工作就可以获得很多好的架构. 例如,Ruby on Rails 基于模型-

  • Ruby基础知识之数据类型

    一.数值类型 (1)整型 整型分两种,如果在31位以内(四字节),那为Fixnum实例.如果超过,即为Bignum实例. 复制代码 代码如下: #整型 Integer 以下是一些整型字面量 #字面量(literal):代码中能见到的值,数值,bool值,字符串等都叫字面量 #如以下的0,1_000_000,0xa等 a1=0 #带千分符的整型 a2=1_000_000 #其它进制的表示 a3=0xa puts a1,a2 puts a3 #puts print 都是向控制台打印字符,其中puts

  • 使用Ruby来编写访问Twitter的命令行应用程序的教程

    简介 Twitter 现已成为社交网络中的佼佼者.Twitter 只允许用户发布不多于 140 个字符的内容,谁能够想到,这个过去毫不起眼的小网站如今却价值十多亿美元,拥有数百万用户,Twitter 平台上已构建了大量的应用程序,并且不断有新的开发人员准备投入这一浪潮中. 本文并不打算介绍 Twitter(事实上,也没有这个必要).相反,本文将介绍如何访问 Twitter 平台来构建出色的命令行应用程序.Twitter 支持各种编程语言,包括 C++.Java?.Perl.Ruby.PHP 和

  • 详解Ruby中的方法概念

    Ruby方法跟其他编程语言中的函数非常相似, Ruby方法用于捆绑到一个单元中的一个或多个重复的语句. 方法名称应以小写字母开始.如果一个方法的名称以大写字母开始,Ruby可能会认为这是一个常数,因此可以正确解析调用. 方法应该定义Ruby的之前调用他们,否则会引发一个异常未定义的方法调用. 语法: def method_name [( [arg [= default]]...[, * arg [, &expr ]])] expr.. end 所以,可以定义一个简单的方法如下: def meth

  • 详解Ruby中范围的概念

    范围无处不在:1月至12月,0至9日,50至67行,依此类推. Ruby支持范围,并允许我们使用多种方式的范围: 作为序列范围 作为条件范围 作为区间范围 作为序列范围: 首先,也许是最自然的使用范围来表达序列.序列有一个起点,一个终点和序列中的连续值的方法来生产. Ruby创建'' ..''和'' ...''范围内运算符使用这些序列.这两个点的形式建立一个包容性的范围,而三个点的形式创建了一个范围,不包括指定的高值. (1..5) #==> 1, 2, 3, 4, 5 (1...5) #==>

  • 详解Java中native方法的使用

    今天在网上学习时碰到有关于 native修饰符所修饰的方法,上网查了查,觉得很有意思记录一下 1.native简介 简单地讲,一个Native Method就是一个java调用非java代码的接口.一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C.这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数. native是与C++联合开发的时候用的!使用nat

  • 详解Python中__new__方法的作用

    目录 前言 一.__new__方法简介 1.初始化数据加载+解析类实例 2.初始化数据加载重写new方法+解析类实例 二.单例模式 1.用new方法如何实现单例模式 2.如何控制类仅执行一次初始化方法 三.多例模式 总结 前言 Python中类的构造方法__new__方法有何作用? Python类中有些方法名.属性名的前后都添加__双下画线,这种方法.属性通常属于Python的特殊方法和特殊属性.通过重写这些方法或直接调用这些方法来实现特殊功能.今天来聊聊构造方法__new__实际程序的应用场景

  • 详解Ruby中的单件方法和单件类

    单件方法 Ruby允许给单个对象增加方法,这种只针对单个对象生效的方法,称为单件方法 示例代码 str = "just a regular string" def str.title? self.upcase == self end str.title? # => false str.methods.grep(/title?/) # => [:title?] str.singleton_methods #=> [:title?] str.class # => S

  • 详解python中init方法和随机数方法

    1.__init__方法的使用 2.random方法的使用 在python中,有一些方法是特殊的,是以两个下划线开始,两个下划线结束,定义类,最常用的方法就是__init__()方法,这是类的初始化方法,类似于C#或Java的构造函数.在创建对象的时候自动执行. class Person(object): ''' 这里定义的属性 为 静态的 ''' empCount = 0 # 创建对象的时候自动执行 def __init__(self, name): print('初始化方法.....') s

  • 详解Ruby中的循环语句的用法

    Ruby 中的循环用于执行相同的代码块若干次.本章节将详细介绍 Ruby 支持的所有循环语句. Ruby while 语句 语法 while conditional [do] code end 当 conditional 为真时,执行 code.while 循环的 conditional 通过保留字 do.一个换行符.反斜线 \ 或一个分号 ; ,来与 code 分离开. 实例 #!/usr/bin/ruby $i = 0 $num = 5 while $i < $num do puts("

  • 详解Android中Drawable方法

    本文为大家分享了Android中Drawable方法的详细使用方法,供大家参考,具体内容如下 1. BitmapDrawable相关方法: 新建在drawable目录下面,示例如下: <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:antialias="true" android:dither="true" android:filter=&

  • 详解Ruby中的代码块及其参数传递

    一,块的声明    块的声明在函数调用之后,用{..}括起来,或do..end封装.{}一般用在单行语句上,do..end用在多行语句上. (1..4).each{|v| print "#{v} "} #输出1 2 3 4 块可以带参数,与函数参数不同,块参数用||封装,当然,可以带多个参数.这些参数怎么定义,实际上是在函数内部定义好的,后面会讲到. 二,块内变量的访问    块内可以访问块外的变量,也就是块外的变量在块内是可见的,如 sum = 0 (1..5).each do |v

  • 详解Rust中的方法

    目录 Rust中的方法 方法的简单概念 定义方法 Rust自动引用和解引用 带参数的方法 小结 Rust中的方法 方法其实就是结构体的成员函数,在C语言中的结构体是没有成员函数的,但是Rust毕竟也是一门面向对象的编程语言,所以给结构体加上方法的特性很符合面向对象的特点. 方法的简单概念 方法(method)与函数类似:它们使用 fn 关键字和名称声明,可以拥有参数和返回值,同时包含在某处调用该方法时会执行的代码.不过方法与函数是不同的,因为它们在结构体的上下文中被定义,并且它们第一个参数总是

随机推荐