ruby 基础知识(二)
ruby 中的动态方法 http://singleant.iteye.com/blog/1680382
Rails 大量使用了符号(symbol)。符号看上去很像变量名,不过以冒号作为前缀。符号的例子包
括:action、:line_items、:id 等。可以把符号看作字符串文本,不过——如同魔法般地——被变成
了常量。
可以把冒号看作“名字叫做……的东西”,因此:id 的意思就是“名字叫做id 的东西”。
Rails 用符号来给别的东西打上标记。尤其是,Rails 常常用符号来给方法参数命名,以及用作
hash 的键。譬如说:
redirect_to :action => "edit" , :id => params[:id]
===
在类定义的主体部分,可以定义类方法和实例方法。只要在方法名的前面加上"self.”前缀(请看
上述代码的第5 行),就可以让它成为类方法:可以在类层面上调用它。以上述代码为例,我们可以在应
用程序的任何地方进行下列调用:
to_collect = Order.find_all_unpaid
通常的方法定义(请看第9 行对total 方法的定义)则会创建出实例方法(instance method)。
实例方法必须在对象层面上调用。在下面的例子中,order 变量引用一个Order 对象,total()方法的
定义如前所述。
puts "The total is #{order.total}"
可以看到find_all_unpaid()和total()方法之间的差异。前者并不特定针对某一份订单,因
此我们在类层面上定义它,并通过Order 类来调用它;后者只对一份订单生效,因此我们将其定义为实
例方法,并针对一个特定的Order 对象来调用它。
==
对象将内部状态保存在实例变量(instance variable)中,实例变量的名字必须以“@”开头,
所有实例方法都可以访问它们。每个对象拥有各自独立的一组实例变量
==
模块和类有相似之处:它们都包含一组方法、常量,以及其他类和模块的定义。但和类不同的是,
你无法创建模块的实例。
==
数组的一个常用方法是<<,该方法会把一个值附加到数组的尾端。
ages = []
for person in @people
ages << person.age
end
==
Ruby 的hash 与数组非常相似。hash 字面量使用大括号,而不是方括号,并且其中的每个条目必
须由两个对象组成:前者是索引键,后者是值。譬如说,可以这样建立“乐器”与“乐器种类”之间的对
应关系。
inst_section = {
:cello => 'string' ,
:clarinet => 'woodwind' ,
:drum => 'percussion' ,
:oboe => 'woodwind' ,
:trumpet => 'brass' ,
:violin => 'string'
}
=>左边的东西是索引键,右边的是与之对应的值。在同一个hash 中,索引键必须唯一,也就是说
你不能为:drum 建立两个条目。hash 中的键和值可以是任意对象——你甚至可以在hash 中保存数组或
者别的hash.在Rails 中,通常使用符号来作为hash 的索引键。
==
正则表达式可以用于指定字符的组合模式(pattern),并将其与字符串相匹配。在Ruby 中,创建
正则表达式的方式通常是/pattern/或者%r{pattern}。
譬如说,你可以编写一个模式,使之匹配包含“Perl”或者“Python”的字符串。这个正则表达
式的写法是/Perl|Python/。
if line =~ /P(erl|ython)/
puts "There seems to be another scripting language here"
end
还可以在模式中指定重复字符(repetition)。例如/ab+c/可以匹配到这样的字符串:其中包含
一个“a”,其后是一个或多个“b”,再然后是一个“c”。如果把模式中的加号变成星号,/ab*c/匹配到
的则是这样的字符串:一个“a”,然后是0 个或多个“b”,再然后是一个"c”。
==
简单地说,代码块(block)就是大括号或者do...end 之间的代码。按照惯例,单行的代码块使用
大括号,多行的代码块使用do/end。
{ puts "Hello" } # this is a block
do ###
club.enroll(person) # and so is this
person.socialize #
end ###
代码块只能出现在方法调用的后面:代码块的开始标记必须紧跟在方法调用的同一行。譬如说,在
下列代码中,包含了“puts "Hi"”的代码块紧跟着对greet()方法的调用。
greet { puts "Hi" }
ruby 基础知识(二)的更多相关文章
- java 基础知识二 基本类型与运算符
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
- 菜鸟脱壳之脱壳的基础知识(二) ——DUMP的原理
菜鸟脱壳之脱壳的基础知识(二)——DUMP的原理当外壳的执行完毕后,会跳到原来的程序的入口点,即Entry Point,也可以称作OEP!当一般加密强度不是很大的壳,会在壳的末尾有一个大的跨段,跳向O ...
- Dapper基础知识二
在下刚毕业工作,之前实习有用到Dapper?这几天新项目想用上Dapper,在下比较菜鸟,这块只是个人对Dapper的一种总结. 2,如何使用Dapper? 首先Dapper是支持多种数据库的 ...
- python基础知识(二)
python基础知识(二) 字符串格式化 格式: % 类型 ---- > ' %类型 ' %(数据) %s 字符串 print(' %s is boy'%('tom')) ----> ...
- Java基础知识二次学习--第三章 面向对象
第三章 面向对象 时间:2017年4月24日17:51:37~2017年4月25日13:52:34 章节:03章_01节 03章_02节 视频长度:30:11 + 21:44 内容:面向对象设计思 ...
- Java基础知识二次学习-- 第一章 java基础
基础知识有时候感觉时间长似乎有点生疏,正好这几天有时间有机会,就决定重新做一轮二次学习,挑重避轻 回过头来重新整理基础知识,能收获到之前不少遗漏的,所以这一次就称作查漏补缺吧!废话不多说,开始! 第一 ...
- 快速掌握JavaScript面试基础知识(二)
译者按: 总结了大量JavaScript基本知识点,很有用! 原文: The Definitive JavaScript Handbook for your next developer interv ...
- Solr基础知识二(导入数据)
上一篇讲述了solr的安装启动过程,这一篇讲述如何导入数据到solr里. 一.准备数据 1.1 学生相关表 创建学生表.学生专业关联表.专业表.学生行业关联表.行业表.基础信息表,并创建一条小白的信息 ...
- ruby 基础知识(一)
突然今天发现一大神的博客:http://www.cnblogs.com/jackluo/archive/2013/01/22/2871655.html 相信初学者会受益颇多 ruby 参考文档 ...
随机推荐
- eclipse 启动到loading workbench... 自动关闭
是由于项目没有正常关闭运行而导致"workbench.xmi"中的"persistedState"标签还保持在运行时的配置造成的. 解决方法: 找到<wo ...
- 项目自动化建构工具gradle 入门0——环境 & 废话
gradle 是一个项目自动化构建工具.同类的产品还有ant ,maven等等.相比之下我更喜欢gradle,它语法简洁.兼容maven.ide集成很好. 学习使用gradle最快的方式是看文档,而且 ...
- sql select 1-10的数字
SELECT V FROM ( VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10) ) [1 to 10](V)
- Python学习Day2笔记(字符编码和函数)
1.字符编码 #ASCII码里只能存英文和特殊字符 不能存中文 存英文占1个字节 8位#中文编码为GBK 操作系统编码也为GBK#为了统一存储中文和英文和其他语言文字出现了万国码Unicode 所有一 ...
- mysql benchmark基准测试
git项目地址: https://github.com/akopytov/sysbench 利用sysbench很容易对mysql做性能基准测试(当然这个工具很强大,除了测试主流数据库性能,还能测试其 ...
- Underscore 整体架构浅析
前言 终于,楼主的「Underscore 源码解读系列」underscore-analysis 即将进入尾声,关注下 timeline 会发现楼主最近加快了解读速度.十一月,多事之秋,最近好多事情搞的 ...
- 微信支付(.NET版)
前段时间做了网页版微信支付,遇到很多问题,不过最终还是解决了,现在在这里记录下开发流程以及说明,给其他人一些参考. 一.准备工作 首先肯定得先要开通微信支付功能,之前开通微信支付需要三万的押金 ...
- JavaScript-简单的贪吃蛇小游戏
实现逻辑: //获取Html中的格子(行,列) //建立数组存储所有格子(x,y) //建立数组用于存储蛇身(x,y) //生成随机坐标(x,y)的函数 //随机创建蛇身并存储到蛇身数组 //创建食物 ...
- jsp的九大内置对象
九大内置对象 jsp servlet 对象名 类型 使用范围 request HttpServletRequest 请求 浏览器--->服务器 response HttpServletRes ...
- Java_jvisualvm使用JMX连接远程机器(实践)
https://my.oschina.net/heroShane/blog/196227 一.启动普通的jar程序 1.执行foo.jar启动命令 java -Dcom.sun.management. ...