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) 虽 ...
随机推荐
- 【转】STL中mem_fun和mem_fun_ref的用法及区别
原文:http://www.cppblog.com/mysileng/archive/2012/12/25/196615.html 引子: 怎么对容器中的所有对象都进行同一个操作?我们可能首先想到的是 ...
- 2014年辛星完全解读Javascript第七节 数组和对象
由于Javascript是脚本语言,因此,使用起来非常方便,数组的使用也是比较简单的,下面我们就主要介绍一下Javascript中数组的介绍,以及上一节中没有完成的对象的介绍. *********** ...
- Xen学习——原理要点归纳总结
Xen是半虚拟化,需要修改操作系统内核.Vmware是完全虚拟化. XEN的系统架构: Xen Hypervisor: 直接运行在硬件上,介于操作系统和硬件之间的一层软件,负责管理CPU.内存.中断. ...
- js时间格式的转换
function System_dateInit(value) { if (value != null) { var d = new Date(value); ...
- JVM -XX: 参数介绍(转)
垃圾回收器相关常用参数: 功能开关: 参数 默认值或限制 说明 参数 默认值 功能 -XX:-AllowUserSignalHandlers 限于Linux和Solaris,默认不启用 允许为java ...
- 用于软件包管理的21个Linux YUM命令
FROM:http://os.51cto.com/art/201309/411895.htm YUM(Yellowdog Updater Modified)是一款开源命令行及图形化软件包管理工具,面向 ...
- Code for the Homework1
作业要求: http://www.cnblogs.com/bingc/p/4919692.html 代码(未使用Eigen): #include <iostream> #include & ...
- JPA2 关于 PagingAndSortingRepository
And --- 等价于 SQL 中的 and 关键字,比如 findByUsernameAndPassword(String user, Striang pwd): Or --- 等价于 SQL 中的 ...
- c#保留小数点后两位
double d = 23423.24234234d; Response.Write(d.ToString("0.00"));
- 解析php中die(),exit(),return的区别
die()停止程序运行,输出内容exit是停止程序运行,不输出内容return是返回值die是遇到错误才停止exit是直接停止,并且不运行后续代码,exit()可以显示内容.return就是纯粹的返回 ...