#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基础类型,动态特性,代码块的更多相关文章

  1. Java基础8-多线程;同步代码块

    作业解析 利用白富美接口案例,土豪征婚使用匿名内部类对象实现. interface White{ public void white(); } interface Rich{ public void ...

  2. 【python基础】如何注释代码块

    前言 编写python程序有时候需要对代码块进行comment,本文对此介绍. 方法 python注释的三种方法: 1.井号注释单行代码: # 2.三个单引号或三个双引号注释语句块: ''' 或者&q ...

  3. 夯实Java基础(八)——代码块

    在Java中代码块指的是使用”{}”括起来的代码称为代码块.代码块一共分为4种:局部代码块,静态代码块,同步代码块,构造代码块. 1.局部代码块 局部代码块就是定义在方法体内部的代码块. public ...

  4. Ruby 中的闭包-代码块

    看了一片文章https://ruby-china.org/topics/38385讲closure的. 写下一些感想: 闭包就是 一个函数能够记住和存取它的lexical作用域,即使这个函数是在它的l ...

  5. java代码块的理解

    最近在复习java基础,在看到java代码块的时候,忽然发现自己貌似对于java代码块一无所知,于是赶紧对着一些资料实战演练了一把. 对于java代码块,不难根据名称看出其实就是一些java语句的集合 ...

  6. objective-c的代码块block

    一.block 1.bock是由于^开头,括号里面填写参数类型. 标准代码块:       返回值 (^代码块名称) (参数类型) = ^(参数) {方法体}; 2.我们的块即可以定义在函数内或者对象 ...

  7. JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常

    在Java 7中,catch代码块得到了升级,用以在单个catch块中处理多个异常.如果你要捕获多个异常并且它们包含相似的代码,使用这一特性将会减少代码重复度.下面用一个例子来理解. Java 7之前 ...

  8. 黑马程序员——JAVA基础之构造函数,构造代码块

    ------- android培训.java培训.期待与您交流! ---------- 构造函数特点: 1.  函数名与类名相同 2.  不用定义返回值类型 3.  不可以写return语句 构造函数 ...

  9. python基础之小数据池、代码块、编码和字节之间换算

    一.代码块.if True: print(333) print(666) while 1: a = 1 b = 2 print(a+b) for i in '12324354': print(i) 虽 ...

随机推荐

  1. IOS6开发环境环境配置

    IOS6开发环境环境配置http://www.wizzer.cn/?p=2438http://diybbs.zol.com.cn/1/34037_629.htmlhttp://diybbs.zol.c ...

  2. ASP.NET如何获取根目录的方法汇总

    编写程序的时候,经常需要用的项目根目录,自己总结如下: 1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径 方法 ...

  3. struts2拦截器-简单实现非法登录验证

    概念:什么是拦截器 拦截器实现了面向切面的组件,它会影响多个业务对象的公共行为封装到一个个可重用的模块,减少了系统的重复代码,实现高度内聚,确保业务对象的整洁!   为什么使用拦截器 拦截器消除了动作 ...

  4. Visual Studio 中TODO List的使用

    http://msdn.microsoft.com/en-us/library/txtwdysk.aspx 工欲善其事,必先利其器 When the Task List is open, you ca ...

  5. 1052: [HAOI2007]覆盖问题 - BZOJ

    Description 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定用3个L*L的正方形塑料薄膜将小 ...

  6. Matlab中rand('state',sum(clock))解析

    一.问题来源 来自于一份PSO代码,PSO中需要初始化粒子位置和速度. 二.问题探究 众所周知,Matlab中的rand()函数产生的是伪随机数,但一般用来也可以接受.但是,如果我们知道伪随机数的初始 ...

  7. POJ 1850 Code(组合数)

    http://poj.org/problem?id=1850 题意 :给定字符串,系统是用字符串组成的,字符串是按字典序排的.编码系统有三条规则,1这些的单词的长度是由小到大的,2相同长度的按字母在字 ...

  8. CF 136A Presents

    http://codeforces.com/problemset/problem/136/A 题意 :就是输入很多数字,第 i 个数字 pi 代表着第 i 个人的礼物给了第 pi 个人,而让你输出的数 ...

  9. android listview判断是否滑动到顶部还是底部

    listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStat ...

  10. 【疯狂Java学习笔记】【理解面向对象】

    [学习笔记]1.Java语言是纯粹的面向对象语言,这体现在Java完全支持面向对象的三大基本特征:封装.继承.多态.抽象也是面向对象的重要组成部分,不过它不是面向对象的特征之一,因为所有的编程语言都需 ...