Ruby学习笔记(二)
1.block 代码块
do...end 或 {} 构成一个代码块,就像常见的 .each后面跟的代码块、
my_nums = [1,2,3]
my_double_nums = my_nums.collect {|num| num*2}
puts "#{my_double_nums}" #=> [2,4,6]
collect能作用在Array的每个元素上,也支持collect! 操作,即改变数组本身。map! 和 collect! 作用相同
yield关键字 yield能够在方法内调用 block,这也是为什么有一些方法能接受一个block而另一些不行。
yield也能接受参数
def yield_name(name)
puts "In the method! Let's yield."
yield name
puts "Block complete! Back in the method."
end
yield_name("Eric") { |name| puts "My name is #{name}." }
2.Procs 使得我们能复用block
Ruby中“一切皆对象”。但是,Blocks却不是对象,所以我们需要使用procs去“存储”block。
Procs使得你的代码符合DRY-Don't Repeat Yourself特性。
multiples_of_3 = Proc.new do |n|
n % 3 == 0
end
(1..100).to_a.select(&multiples_of_3)
&用来将multiples_of_3转换成block。当把带有&符号的参数传给方法时,会被认出是block、
将block "save"成procs有两个主要好处:1.procs是objects,所以具有objects的能力。2.复用
然而,你始终要记得,在Ruby中去做某些事时,总是有不止一种方法。所以,有另外的方法去调用procs:call关键字
hi = Proc.new { puts "Hello!" }
hi.call
另外,symbol能当做函数名的引用去传递一个函数,symbol前加&也能转换成procs
numbers_array = [1, 2, 3]
strings_array = numbers_array.map(&:to_s)
#=> ["1","2","3"]
3.Lambda
与procs类似,lambdas也是对象。他们的相似之处不止于此:除了语法上的一点不同和各自某些特殊的行为,两者是几乎一样的。
def lambda_demo(a_lambda)
puts "I'm the method!"
a_lambda.call
end
lambda_demo(lambda { puts "I'm the lambda!" })
my_array = ["raindrops", :kettles, "whiskers", :mittens, :packages]
symbol_filter = lambda{|item| item.is_a? Symbol}
symbols = my_array.select(&symbol_filter)
4.简单的总结
5.Class
def self.func; end 或者
def ClassName.func; end
del initialize ... end
class DerivedClass < BaseClass #Some stuff! end
class ClassName
public
def public_method; end
private
def private_method; end
end
class Person
attr_reader :name #name的get方法
attr_writer :age #age的set方法
attr_accessor :gender #gender的getter和setter #age的get方法,同 attr_reader :age
def age
@age
end #name的set方法,同 attr_writer :name
def name=(value)
@name = value
end
end
Ruby学习笔记(二)的更多相关文章
- ruby学习笔记(1)-puts,p,print的区别
ruby学习笔记-puts,p,print的区别 共同点:都是用来屏幕输出的. 不同点:puts 输出内容后,会自动换行(如果内容参数为空,则仅输出一个换行符号):另外如果内容参数中有转义符,输出时将 ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- JMX学习笔记(二)-Notification
Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...
- java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- 《SQL必知必会》学习笔记二)
<SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(二) indigo tools
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
随机推荐
- jquery返回顶部-ie6配合css表达式。
css: .wraper{ width:980px; height:2048px; margin:0 auto; background:#ccc; } /*返回头部*/ #backToTop a{;; ...
- C#一个字符串的加密与解密
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.S ...
- java 读入换行
java中实现换行有以下几种方法:1.使用java中的转义符"\r\n": 注意:\r,\n的顺序是不能够对换的,否则不能实现换行的效果. 2.BufferedWriter的new ...
- Entity Framework 实践系列 —— 搞好关系 - 两情相悦(双向一对一)【转载】
Entity Framework 实践系列 —— 搞好关系 - 两情相悦(双向一对一) 自从搞好了单向一对一关系,装满代码的心中塞进了挥之不去的情丝 —— 单相思.谁都知道音乐世界离不开情感,可谁又知 ...
- Java 字节码
Java作为业界应用最为广泛的语言之一,深得众多软件厂商和开发者的推崇,更是被包括Oracle在内的众多JCP成员积极地推动发展.但是对于Java语言的深度理解和运用,毕竟是很少会有人涉及的话题.In ...
- Sed&awk笔记之awk篇
http://blog.csdn.net/a81895898/article/details/8482333 Awk是什么 Awk.sed与grep,俗称Linux下的三剑客,它们之间有很多相似点,但 ...
- AWK 简明教程
AWK 简明教程 转自:http://coolshell.cn/articles/9070.html 有一些网友看了前两天的<Linux下应该知道的技巧>希望我能教教他们用awk和sed, ...
- Android开源项目发现--- 工具类图片缓存篇(持续更新)
1. Android-Universal-Image-Loader 图片缓存 目前使用最广泛的图片缓存,支持主流图片缓存的绝大多数特性. 项目地址:https://github.com/nostra1 ...
- 《STL源码剖析》chapter2空间配置器allocator
为什么不说allocator是内存配置器而说是空间配置器,因为空间不一定是内存,也可以是磁盘或其他辅助介质.是的,你可以写一个allocator,直接向硬盘取空间.sgi stl提供的配置器,配置的对 ...
- 关于谷歌android 4.3 ble问题
随着BLE的逐渐壮大,越来越多的厂商开始支持BLE,在未来的一年里应该会慢慢普及,谷歌android4.3已经支持了自己的nexus4和uexus7 2013手机了,也就是说如果厂商采用谷歌已经实现d ...