Ruby基础类型,动态特性,代码块
#Ruby内置基础数据类型 NilClass,TureClass,FalseClass,Time,Date,String,Range,Struct,Array,Hash
#Numerice 1.分为Interger整数类。Interger又分为Fixnum和Bignum。
#2.#Float浮点数
#3.Complex复数。 #Bury的动态特性
#1.动态执行字符串形式的代码 eval
#2.动态获得模块或类中的常量和变量的值
#3.动态为类或对象添加方法
#4.对为知变量和方法的动态处理
#5.动态删除定义 #eval编译并执行字符串。javascript的eval
=begin
class_eval 在类的上下文范围内将字符串作为代码编译执行
module_eval 在类或者模块的上下文范围内将字符串作为代码编译执行
instance_eval 是在实例的上下文范围内编译执行 =end
class String
PI="fjskdjf"
def dosome(n)
self[0,n]+(self.size > n ? ".." : "")#空格不可忽略=_=||
end
for i in [5,6,7,8]
module_eval "def dosome_#{i}
dosome(#{i})
end
"
end
end
puts "sdfsdf".dosome_5
puts "sdfdsfsdf".dosome_6 puts "gsfsdf".upcase
puts "sdfsdf".send("upcase")#send方法动态调用对象的方法
#puts "sadfd".methods
#puts String.methods #获取对象的所有方法名
#instance_methods 返回所有公开的实例方法名,protected_methods返回的是受保护的方法名
puts String.method_defined?(:upcase)#检查对象是否定义了某实例方法
puts "String".respond_to?(:upcase)#检查对象是否能相映某实例方法的调用
puts String.const_get("PI")#根据常量的名称获取模块货类中常量的值
puts String::PI
#const_missing,method_missing 方法,当对象调用不存在的方法或者常量的时候可以自定义返回的错误信息。 array=[1,3,4,5,22,33]
array<<[1,44,5,6,7]#添加元素
array.push([333,1234,1233333])#添加元素
array.each { |item|
puts item
}
lambda和proc,block
def test(arg,arg2,&block)
#把方法的参数处理后传递给代码块的参数
yield arg+arg2,"代码块的第二个参数"#占了两个位,所以下面调用都会输出2次,代码块其实是Proc对象
yield arg+arg2,"第二个参数"#这里的yield其实就相当与下面的作用
block.call(arg+arg2,"proc对象第二个参数")
end
#test(11) {puts "yield占位"}
#test do
# puts "今天是个好日子"
#end
#代码块 的两种创建方式{ 代码 } ,do 代码 end
test("啥玩意儿","恩德") {|x,y| puts x+y}
block=Proc.new{|o,x| puts o+x+"Proc方法"}
test("啥啥","正规军",&block)
#代码块的参数用|参数|传递。yield (x,y)给代码块传递参数
#使用proc方法的好处是能感觉到给方法传递了代码块参数,proc对象做方法传递是要加上&符号 def f0()
p = Proc.new { return 0}
p.call
1
end def f1()
l = lambda { return 0}
l.call
1
end f0 # 返回0
f1 # 返回1 #如果你能够理解proc在行为上更像block,lambda其实就是方法只不过是匿名的,那么你对上面的结果不会感到惊讶。 #如果把f0,f1做一些修改,就更容易理解上面的结果了。 def f0()
return 0
1
end def f1()
def __f1
return 0
end
__f1
1
end f0 # 返回0
f1 # 返回1
异常处理
def extest(x,y)
begin#try
z=x/y
rescue =>err#catch
puts err
#retry 恢复重来
ensure#finaly
puts "操作完毕"
end
end
extest(1,0)
Ruby基础类型,动态特性,代码块的更多相关文章
- Java基础8-多线程;同步代码块
作业解析 利用白富美接口案例,土豪征婚使用匿名内部类对象实现. interface White{ public void white(); } interface Rich{ public void ...
- 【python基础】如何注释代码块
前言 编写python程序有时候需要对代码块进行comment,本文对此介绍. 方法 python注释的三种方法: 1.井号注释单行代码: # 2.三个单引号或三个双引号注释语句块: ''' 或者&q ...
- 夯实Java基础(八)——代码块
在Java中代码块指的是使用”{}”括起来的代码称为代码块.代码块一共分为4种:局部代码块,静态代码块,同步代码块,构造代码块. 1.局部代码块 局部代码块就是定义在方法体内部的代码块. public ...
- Ruby 中的闭包-代码块
看了一片文章https://ruby-china.org/topics/38385讲closure的. 写下一些感想: 闭包就是 一个函数能够记住和存取它的lexical作用域,即使这个函数是在它的l ...
- java代码块的理解
最近在复习java基础,在看到java代码块的时候,忽然发现自己貌似对于java代码块一无所知,于是赶紧对着一些资料实战演练了一把. 对于java代码块,不难根据名称看出其实就是一些java语句的集合 ...
- objective-c的代码块block
一.block 1.bock是由于^开头,括号里面填写参数类型. 标准代码块: 返回值 (^代码块名称) (参数类型) = ^(参数) {方法体}; 2.我们的块即可以定义在函数内或者对象 ...
- JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常
在Java 7中,catch代码块得到了升级,用以在单个catch块中处理多个异常.如果你要捕获多个异常并且它们包含相似的代码,使用这一特性将会减少代码重复度.下面用一个例子来理解. Java 7之前 ...
- 黑马程序员——JAVA基础之构造函数,构造代码块
------- android培训.java培训.期待与您交流! ---------- 构造函数特点: 1. 函数名与类名相同 2. 不用定义返回值类型 3. 不可以写return语句 构造函数 ...
- python基础之小数据池、代码块、编码和字节之间换算
一.代码块.if True: print(333) print(666) while 1: a = 1 b = 2 print(a+b) for i in '12324354': print(i) 虽 ...
随机推荐
- js 使用技巧 - [近几年工作中的经验总结的技巧]
1.如果 ajax 返回单一的 json 格式,接收方需要这样再格式化一下赋值: var str = eval("(" + msg + ")"); 开发引用: ...
- Matlab中rand('state',sum(clock))解析
一.问题来源 来自于一份PSO代码,PSO中需要初始化粒子位置和速度. 二.问题探究 众所周知,Matlab中的rand()函数产生的是伪随机数,但一般用来也可以接受.但是,如果我们知道伪随机数的初始 ...
- 彻底弄懂LSH之simHash算法
马克·吐温曾经说过,所谓经典小说,就是指很多人希望读过,但很少人真正花时间去读的小说.这种说法同样适用于“经典”的计算机书籍. 最近一直在看LSH,不过由于matlab基础比较差,一直没搞懂.最近看的 ...
- Ehcache 整合Spring 使用页面、对象缓存(转载)
Ehcache在很多项目中都出现过,用法也比较简单.一般的加些配置就可以了,而且Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布式缓存.如果整合Spring.Hibernate也非常的 ...
- Manifest 与TypeTag
Manifest和TypeTag是要解决什么问题? As with other JVM languages, Scala’s types are erased at compile time. T ...
- 重新学struct,边界对齐,声明……与Union的区别
在内存中,编译器按照成员列表顺序分别为每个结构体变量成员分配内存,当存储过程中需要满足边界对齐的要求时,编译器会在成员之间留下额外的内存空间. 如果想确认结构体占多少存储空间,则使用关键字sizeof ...
- HDU 1422 重温世界杯(DP)
点我看题目 题意 : 中文题不详述. 思路 : 根据题目描述及样例可以看出来,如果你第一个城市选的是生活费减花费大于等于0的时候才可以,最好是多余的,这样接下来的就算是花超了(一定限度内的花超),也可 ...
- hdu 4678 Mine 博弈论
这是一题简单的博弈论!! 所有的空白+边界的数字(个数为n)为一堆,容易推出其SG函数值为n%2+1: 其他所有的数字(个数为m)的SG值为m%2. 再就是用dfs将空白部分搜一下即可!(注意细节) ...
- tomcat集群部署
1.apache只有处理静态事物的能力, 而tomcat的强项就是处理动态的请求 2.由apache作为入口,如果是请求静态页面或者是静态文件,由apache直接提供,如果是请求动态页面,则让apac ...
- Altium Designer13 如何导出Gerber文件
参考<http://blog.sina.com.cn/s/blog_9b9a51990100zyyv.html> 版本:AD13.3.4 目的:Gerber文件导出备忘 目录: Step1 ...