2月9日 Time and Date(Ruby基础) \n 2月10日 ,使用Proc,block对象化。
20.1Time类 ,Data类
Time.now或者Time.new:获取当前时间。
相关Method:
year, month, hour, min ,sec,
wday: 一周中的第几天,返回整数。(0表示星期天)
mday: the day in a month
yday: the day in one year
zone: 时区time zone , => "CST"
Time.mktime(参数)
sleep(10) #等待多少秒
20.3 Time对象可以互相比较和运算。
> t = Time.now #=> 2018-02-11 09:39:39 +0800
t.to_s #转换为字符串
t.strftime() #客制化某种格式的字符串
20.5 本地时间
t.utc #得到一个新对象,获取国际协调时间UTC
t.localtime #得到一个新对象, 本地时间
20.6 从字符串获取时间。
获得字符串:如
"2010年12月23日下午8点17分50秒"
解析成Time对象:
用Time.prase(str),但中文的无法解析,特殊格式的也无法解析。 需要自定义Method。
例子:把中文时间,转换为Time对象?
def cparsedate(str)
now = Time.now
year = now.year
month = now.month
day = now.day
hour = now.hour
min = now.min
sec = now.sec
str.scan(/(上午|下午)?(\d+)(年|月|日|点|分|秒|时)/) do
case $3
when "年"
year = $2.to_i
when "月"
month = $2.to_i
when "日"
day = $2.to_i
when "点"
hour = $2.to_i
hour += 12 if $1 == "下午"
when "时"hour = $2.to_i when "分"
min = $2.to_i
when "秒"
sec = $2.to_i
end
end
return Time.mktime(year, month, day, hour, min, sec)
end
p cparsedate("2010年12月23日下午8点17分50秒")
p cparsedate("12月23日下午8点17分50秒")
p cparsedate("上午8时17分50秒")
p cparsedate("8点17分50秒")
20.7 获取日期
require "date" 获取Date类需要引用date库
Date.today
相关method和Time一样。
指定生成日期使用:Date.new(2018, 1, 31) ⚠️ :和Time.mktime()区分
20.8计算日期
Date对象减法,返回天数。对象是Rational对象
<<,>>返回前/后一个月相同的日期
=> #<Date: 2018-02-11 ((2458161j,0s,0n),+0s,2299161j)>
20.11
to_time 和 to_date互相转换Time对象和Date对象。
GC:Garbage Collection ,ruby自动支持。
根据生日计算年龄。
定义一个Person类,内含初始化method, age method.
require "date"
class Person
attr_reader :birth_date
# 通过 Person.new 获取关键参数生年月日
def initialize(birth_date)
@birth_date = birth_date
end
# 返回某个日期的年龄。没有指定日期则返回今天的年龄。
def age(date=Date.today)
# 如果是出生前则返回 -1 (错误)
return -1 if date < birth_date
years = date.year - birth_date.year if date.month < birth_date.month
# #没满一年,所以减一年
years -= 1
elsif date.month == birth_date.month && date.day < birth_date.day
# 还差不到一个月生日,所以减一年
years -= 1
end
return years
end
end
ruby = Person.new(Date.new(1993, 2, 24))
p ruby.birth_date # 生年月日
p ruby.age # 今天
p ruby.age(Date.new(2013, 2, 23)) # 20岁的前一天 19
p ruby.age(Date.new(2013, 2, 24)) # 20岁的生日 20
p ruby.age(Date.new(1988, 2, 24)) # 出生之前 -1
上午的练习,设计其他的知识点,没仔细学。
第21章,Proc 对象。
(已完成练习。)
21.1Proc类是什么?使块对象化的类。
创建和执行Proc对象:
Proc.new():典型方法
proc{...} :对proc方法指定block
Proc#call 执行block. 参数是块变量,块中最后的表达式的值返回, call(params,...) → obj
例子:
a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
答案:
a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
a_proc[9, 1, 2, 3] #=> [9, 18, 27]
a_proc.(9, 1, 2, 3) # 仅仅隐藏了call
a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
*values:代表传入的参数转化为数组。
21.11 lambda 表达式 ,简写:->(块变量){处理}
和Proc.new, proc一样,但有区别,lambda创建的Proc对象的行为更接近method
区别:
第一,参数检查严格。
a_proc = proc {|a,b| [a,b] }
a_proc.call(1) #=> [1, nil]
a_proc = lambda {|a,b| [a,b] }
a_proc.call(1) # ArgumentError: wrong number of arguments
第二,lambda可以使用return将值从block返回。
# 或者简写 : ->(x){return x**n}
21.12 通过Proc参数接收块
&block
21.2 Proc特征
Proc对象可以作为无名函数(lambda)或方法使用,但不是单纯的将“处理”对象化,
还可以将处理的内容,本地变量的作用域等定义block时的状态一起保存下来。
闭包closure:将处理内容,变量等环境同时保存的对象。 (保存数据)
def counter
c = 0 # 初始化计数器
Proc.new do # 每调用1次call方法,计数器加1
c += 1 # 返回加1后的Proc对象
end
end # 创建计数器c1并计数
c1 = counter
p c1.call #=> 1
p c1.call #=> 2
p c1.call #=> 3 # 创建计数器c2并计数
c2 = counter # 创建计数器c2
p c2.call #=> 1
p c2.call #=> 2 # 再次用c1计数
p c1.call #=> 4
21.3 Proc类的 instance method
prc === arg
在Proc对象作为case语句的条件时使用,通过===指定的参数只能是1个,这是语法的
2月9日 Time and Date(Ruby基础) \n 2月10日 ,使用Proc,block对象化。的更多相关文章
- 1月10日 ruby基础教程,查漏补缺; 2月22日 Exception补充
https://ruby-doc.org/core-2.5.0/Exception.html 1月20日练习完1,2章. 第一章 初探 ‘’单引号不执行转义符. \t 制表符.\n 换行符. p me ...
- [网站公告]3月10日23:00-4:00阿里云SLB升级,会有4-8次连接闪断
大家好,阿里云将于3月10日23:00-4:00对负载均衡服务(SLB)做升级操作,升级期间SLB网络连接会有约4-8次闪断.由此给您带来麻烦,敬请谅解! 阿里云SLB升级公告内容如下: 尊敬的用户: ...
- 2016年12月10日 星期六 --出埃及记 Exodus 21:5
2016年12月10日 星期六 --出埃及记 Exodus 21:5 "But if the servant declares, `I love my master and my wife ...
- 2016年11月10日 星期四 --出埃及记 Exodus 20:1
2016年11月10日 星期四 --出埃及记 Exodus 20:1 And God spoke all these words: 神吩咐这一切的话说,
- 2014年7月10日,我人生的最重要Upgrade
2014年7月10日上午,我的小公主顺利的出生于国妇婴.之前各种紧张,各种不安.在不安中的前天晚上陪着来上海的董博士于方先生在人民广场聚餐.大家都是工作几年的,各种感慨,对于工作中的零零种种.还有对未 ...
- 【2017年9月10日更新】ABP配套代码生成器(ABP Code Generator)帮助文档,实现快速开发
ABP代码生成器介绍 ABP Code Generator 针对abp这个框架做了一个代码生成器,功能强大.分为两大功能点,一个是数据层,一个是视图层. 数据服务层:通过它,可以实现表设计.领域层初始 ...
- 成都Uber优步司机奖励政策(4月10日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 北京Uber优步司机奖励政策(4月10日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- Network Real Trace Analysis 2015年12月10日
了解网络中真实的流量,国内很难找到巨人的肩膀. WAND是新西兰waikato 大学计算机系的研究小组,主要做网络测量,大规模网络流量捕获,网络分析.还做专业的分析软件. libtrace是其开源的分 ...
随机推荐
- Excel脱拽或者下拉公式时, 保持公式里单元格数字不变
绝对引用 可以选中B1 用F4快捷键自己就给加绝对引用符号了 然后回车 复制或者拖拽
- linux下如何进入单用户模式
忘记密码时,我们可以通过进入单用户模式修改密码. 进入单用户模式的方式: 1. 启动服务器时,按 e 键进入引导选择界面.注意:可能需要多次按 e 键切换几个个界面后,才能进入选择界面. 2. 选择以 ...
- C/C++之内存分配
一.编译时与运行时的内存情况1.编译时不分配内存编译时是不分配内存的.此时只是根据声明时的类型进行占位,到以后程序执行时分配内存才会正确.所以声明是给编译器看的,聪明的编译器能根据声明帮你识别错误.2 ...
- (二) MySQL常用命令及语法规范
- 深入理解kafka
摘自: <kafka权威指南> 集群间成员关系 Kafka 使用Zoo keeper 来维护集群成员的信息.每个broker 都有一个唯一标识符,这个标识符可以在配置文件里指定,也可以自动 ...
- Python入门之软件开发目录规范
本章重点: 理解在开发人标准软件时,如何布局项目目录结构,以及注意开发规范的重要性. 一.为什么要有好的目录结构 二.目录组织的方式 三.关于README的内容 四.关于requirements.tx ...
- 20162311 编写Android程序测试查找排序算法
20162311 编写Android程序测试查找排序算法 一.设置图形界面 因为是测试查找和排序算法,所以先要有一个目标数组.为了得到一个目标数组,我设置一个EditText和一个Button来添加数 ...
- Python3基础 str 通过拆分字符串与插入新的内容形成新的字符串
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- jquery hover最后解决 - 不再疑惑 - 例子在这里
hover具有动画累计的bug, 可以使用 stop 或 filter(:not(:animated))来消除, 但是, 即使这样, 当鼠标反复滑入或滑出的时候, 虽然没有动画累计的问题, 但是 下面 ...
- 【转】<c:forEach varStatus="status">中 varStatus的属性简介 及应用
转载原因:在做页面的时候,需要在页面中判断循环了第几次和一共循环了多少次,在网上搜集的时候,看到这篇帖子,觉得太全面了,于是转载了.... varStatus是<c:forEach>jst ...