Ruby入门介绍第1/5页

一、方法

Ruby 的方法定义允许为参数设置默认值,不过在带有默认值的参数后面不能出现不带有默认值的参数(允许 * 和 &),也就是说下面的方法定义是不被允许的,解释时会出现 parse error。 还有一点与 C# 不同的是,方法定义不能出现在方法调用的后面。


# parse error
def Display(args1="proshea", args2)
end
# 允许
def Display(args1="proshea", *args2)
end
# 允许
def Display(args1="proshea", &args)
end
Show()
# 出现在 Show 调用之后是错误的
def Show
end

Ruby 也支持 C# params 这样的参数功能, 只是 Ruby 用 * 标识罢了。


def Display(*args)
print %Q~#{args.join("-")}~
end
# proshea-32-WinForm
Display("proshea", 32, "WinForm")

同样的, Ruby 也有类似于 C# delegate 的应用,只是更简单,直接用 & 来表示,并且 Ruby 用一个称为 yield 的关键字来知会解释器执行传入的代码块或者说 Proc object(过程对象?)。


1def Display(&block)
2 if block_given?
3 yield(block)
4 else
5 print %Q~没有传入过程对象~
6 end
7end
8
9def Show()
10 print %Q~Show 方法调用~
11end
12
13# 没有传入过程对象
14Display()
15# 在 Display 内部调用 Show 方法
16# 注意起始大括号仍然只能和方法名在同一行
17Display(){
18 Show()
19}

block_given? 是被定义在内部模块 Kernel 当中的方法,用以表明是否传入了 Proc object。之后,Ruby 用 yield 通知解释器执行传入的 Proc。过程对象也可以带有参数,不同于普通方法的是过程对象的参数是位于一组 | | 之中。可以使用 Proc object 的 call 方法来调用带参数的过程对象。


1class Employee
2 def initialize(username, age, &block)
3 @username, @age, @block = username, age, block
4 end
5
6 def Display(txt)
7 # 虽然 @block 是个实例变量,但在此处一定要加上大括号
8 print "#{@block.call(txt)}: #@username-#@age"
9 end
10end
11
12emp = Employee.new("proshea", 32){
13 |txt|
14 txt
15}
16emp.Display("context")

1

当前1/5页 12345下一页阅读全文

您可能感兴趣的文章:

  • Ruby 字符串处理
  • RUBY文档中心-学习开始
  • 深入理解Ruby中的block概念

Tags:Ruby入门介绍

相关文章

  • 2015-05-05Ruby编程中关于中断和返回的用法教程
  • 2014-08-08Java 版的 Ruby 解释器 JRuby 1.7.14 发布
  • 2015-05-05Ruby实现的最短编辑距离计算方法
  • 2014-06-06Java版的Ruby解释器 JRuby简介
  • 2017-05-05CentOS 7下配置Ruby语言开发环境的方法教程
  • 2007-11-11rudy 继承 概念
  • 2015-04-04在Ruby中处理日期和时间的教程
  • 2009-05-05Ruby rails 页面跳转(render和redirect_to)
  • 2014-07-07ruby执行周期性任务的三种gem介绍
  • 2015-04-04简单的Ruby中的Socket编程教程

最新评论

(0)

相关推荐

  • RUBY文档中心-学习开始

    首先,你得检测Ruby是否已经安装了.在shell的提示符处(这里表示为"%",所以不要敲入%),敲入 % ruby -v (-v 告诉解释器打印出Ruby的版本),然后敲回车.如果安装了Ruby,你会看见类似如下的信息: % ruby -v ruby 1.6.6 (2001-12-26) [i586-linux] 如果Ruby未安装,你可以让管理员安装它,或者可以自己做,Ruby是一个没有安装或使用限制的自由软件. 现在,让我们和Ruby玩玩.你可以通过一个-e参数直接在命令行上放置

  • 深入理解Ruby中的block概念

    Ruby 里的 block一般翻译成代码块,block 刚开始看上去有点奇怪,因为很多语言里面没有这样的东西.事实上它还不错. First-class function and Higher-order function First-class function 和 Higher-order function 是函数式编程语言里面的概念,听起来好像很高端的样子,其实很很简单的. First-class functions 是指在某些语言里,函数是一等公民,可以把函数当做参数传递, 可以返回一个函

  • Ruby 字符串处理

    Ruby将字符串像数字一样处理.我们用单引号('...')或双引号("...")将它们括起来. ruby> "abc" "abc" ruby> 'abc' "abc" 单引号和双引号在某些情况下有不同的作用.一个由双引号括起来的字符串允许字符由一个前置的斜杠引出,而且可以用#{}内嵌表达式.而 单引号括起来的字符串并不会对字符串作任何解释;你看到的是什么便是什么.几个例子: ruby> print "

  • Ruby入门介绍第1/5页

    一.方法 Ruby 的方法定义允许为参数设置默认值,不过在带有默认值的参数后面不能出现不带有默认值的参数(允许 * 和 &),也就是说下面的方法定义是不被允许的,解释时会出现 parse error. 还有一点与 C# 不同的是,方法定义不能出现在方法调用的后面. # parse error def Display(args1="proshea", args2) end # 允许 def Display(args1="proshea", *args2) en

  • 不错的JavaScript面向对象的简单入门介绍第1/2页

    1) 如何创建对象: 1. 使用constructor,例如: var obj = new Object() // var 可以省略 var obj = new Date() 2. 使用对象字面值(object literals),例如: 程序代码 var obj = "123" // 创建一个String对象 var obj = /^abc$/ //创建一个RegExp对象 更加复杂的情况是,我们可以直接生成一个自定义的只有属性的对象: 程序代码 var obj = { name:&

  • MyBatis入门介绍(超简单)

    MyBatis 简介 MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis.MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects

  • struts2入门介绍及代码实例

    Struts2的控制器是一个过滤器,Struts中的Action就相当于在基本MVC设计模式当中一个个独立的servlet,并由Action调用模型层(JavaBean)完成一个个具体的业务功能. 在struts2中创建一个例子 新建WEB工程,然后在工程上右键选择Myeclipse–>addstrutsCapabilities,界面中选择struts2,然后点击finish,结束后你会在src文件下面看到struts的配置文件struts.xml. 然后就是在web.xml文件中配置过滤器,配

  • ActiveMQ的简单入门介绍与使用

    一.什么是消息中间件 消息中间件顾名思义实现的就是在两个系统或两个客户端之间进行消息传送 二.什么是ActiveMQ ActiveMQ是一种开源的基于JMS(Java Message Servie)规范的一种消息中间件的实现,ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件. 三.什么时候需要用ActiveMQ ActiveMQ常被应用与系统业务的解耦,异步消息的推送,增加系统并发量,提高用户体验.例如以我在工作中的使用,在比较耗时且异步的远程开

  • C语言循环控制入门介绍

    目录 循环控制: for 循环 while 循环 do while 循环 switch case break: continue: break continue 区别: 总结 循环控制: for 循环 for (语句1; 表达式; 语句2) { 语句块 } 1)循环开始时,先执行语句1. 2)接着判断表达式的条件,如果条件成立,就执行一次循环体中的语句块. 3)语句块执行完后,接下来会执行语句2. 4)重复第2)步和第3),直到表达式的条件不成立才结束for循环. 常见形式: for (int

  • Python类和对象基础入门介绍

    目录 视频 Python 类和对象 创建和使用类 根据类创建实例 视频 观看视频 Python 类和对象 面向对象编程是编写表示现实世界中的事物和情景的类,并基于这些类来创建对象. 编写类时,你定义一大类对象都有的通用行为.基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性.使用面向对象编程可模拟现实情景,其逼真程度达到了令你惊讶的地步. 根据类来创建对象被称为实例化,这是能够使用类的实例. 面向对象最重要的概念就是类(Class)和实例(Instance),

  • Pygame transform模块入门介绍

    目录 简介 函数说明 简介 pygame模块用于变换Surface,Surface变换是一种移动或调整像素大小的操作.所有这些函数都是对一个Surface进行操作, 并将结果返回一个新的Surface. 有些变换被认为是破坏性的.这意味着每次执行这些变换都会丢失像素数据.常见的例子是调整大小和旋转.出于这个原因, 重新变换原始Surface比继续多次变换图像要好.(例如, 假设您正在制作一个弹跳弹簧的动画, 它将膨胀和收缩.如果您将尺寸变化逐步应用于之前的图像, 您将失去细节.相反, 总是从原始

  • C++中关于this指针的入门介绍

    目录 简介 特性 举例 注意 简介 C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参 数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问.只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成 特性 1. this指针的类型:类类型* const 2. 只能在“成员函数”的内部使用 3. this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this 形参.所以对象中不存储this

  • SQL Server中row_number函数用法入门介绍

    目录 一.SQL Server Row_number函数简介 二.Row_number函数的具体用法 1.使用row_number()函数对结果集进行编号 2.对结果集按照指定列进行分组,并在组内按照指定列排序 3.对结果集按照指定列去重 总结 一.SQL Server Row_number函数简介 ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数. 行号以每个分区中第一行的行号开头. 语法实例: select *,row_number() over(

随机推荐