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) 虽 ...
随机推荐
- (转载)Cocos2dx-OpenGL ES2.0教程:纹理贴图(6)
在上一篇文章中,我们介绍了如何绘制一个立方体,里面涉及的知识点有VBO(Vertex Buffer Object).IBO(Index Buffer Object)和MVP(Modile-View-P ...
- 【BZOJ 1911】 [Apio2010]特别行动队
Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 HINT 转移方程 f[i]=max(f[j]+ ...
- WebView重定向新开界面问题-b
首先介绍下这个问题,iOS上WebView 如果想更贴近native,就要加载新URL的时候新开个界面,但是如果加载的链接有重定向的话,就会在中间开一个空白的界面,这个好烦.然后就是解决这个问题,采用 ...
- springmvc 数据对象回绑
springmvc中,由页面 post到 controller,对象可以在form里面设置modelAttribute达到回绑的目的. 但是如果对象里面有复杂的非String,int的对象,则要在co ...
- HTTP POST GET 区别
一 原理区别 一般在浏览器中输入网址访问资源都是通过GET方式:在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交 Http定义了与服务器交互的不同方法,最基本的 ...
- ExtJS4.2学习(11)可拖放的表格(转)
鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-18/180.html --------------- ...
- Scroll文字滚动js
function ScrollImgLeft(){ var speed=50, doc=document, scroll_begin = doc.getElementById("scroll ...
- Android支付接入(一):支付宝
原地址:http://blog.csdn.net/simdanfeg/article/details/9011603 转载之前我想深深地感谢屌丝哥 相信相同过App获取利润的都会需要接入计费SDK,下 ...
- python参考手册--第2章词汇和语法约定
1.续行符\ 三引号.().{}.[]中的内容不需要续行符 2.空格缩进 优选空格作为缩进,不要用tab,这是因为不同操作系统下tab对应的空格不一样,而python是通过严格的空格来控制语句块的. ...
- adobe 蛋疼的套装, 想安装一个Flash Professional CS6,标准版还没有...
产品比较 查看内容 查看各 Creative Suite 6 版本的组件. Design Standard Design & Web Premium Production Premium Ma ...