ruby
interhanchi
这个作者很懒,什么都没留下…
展开
-
今天决定跳进ruby这个坑了
[code]a = if 5 > 6 7 else puts "hi" end[/code]看到了这句,我就被吸引了, (主要是和我心爱的scheme很像):D .先把python放一放了,决定进入红宝石的世界了....2007-06-15 09:46:31 · 87 阅读 · 0 评论 -
ruby way之动态特性之二
1 得到所定义的实体的列表ruby的反射api能够使我们在运行时检测类和对象。因此我们下面将会介绍Module, Class, 和Object中的定义的一些方法。Module模块有一个constants 的方法,它将会返回系统中所有的常量名,包括类名和模块名。nesting 方法则是返回当前调用点上的嵌套的模块的列表.[code="ruby"]list = Math.con...2008-01-25 00:49:18 · 116 阅读 · 0 评论 -
ruby way之动态特性之一
1 动态的evaluate代码全局的方法eval 编译并且执行一段包含ruby代码片断的字符串,这是一个很power的机制,因为它允许你建造在运行时执行的代码。看下面的例子:[code="ruby"]parameters = {}ARGF.each do |line| name, expr = line.split(/\s*=\s*/, 2) param...2008-01-23 01:25:04 · 92 阅读 · 0 评论 -
ruby way之高级OOP特性之二
1 把代码像对象一样存储当你想要以对象的形式存储一块代码的时候,ruby给了你几种方法。下面我们会介绍Proc 对象, Method 对象和 UnboundMethod 对象.内置的Proc 类包装ruby block到一个对象.Proc对象,像一个blocks,是一个闭包而且保存了它定义时的上下文:[code="ruby"]myproc = Proc.new { |a| ...2008-01-20 03:43:54 · 167 阅读 · 0 评论 -
ruby way之高级OOP特性之一
1 发送一条消息给一个对象当你调用一个方法时,你也就是发送了一条消息给一个对象,在ruby中我们能够在运行时决定那个方法被调用。send 方法就是做这个的,他接受一个symbol为参数.举个简单的例子,假设我们要写一个排序,我们想要使用不同的域作为比较的key。虽然我们这时可以用block,可是如果使用send的话,我们能有一个更优美的写法:[code="java"]cla...2008-01-19 12:14:30 · 141 阅读 · 0 评论 -
ruby way之OOP之二
1 理解allocate在一些特殊的环境中,你可能需要不调用它的构造器(也就是initialize)来创建一个对象。也就是说你想要创建一个空的对象.例如,假设你有一个对象,它的状态完全的由它的存取方法所确定,因此如果你不是真的想要一个另外的状态的话,调用new方法是没必要的.此时我们能allocate方法.[code="ruby"]class Person attr_acce...2008-01-16 23:59:08 · 79 阅读 · 0 评论 -
ruby way之OOP之一
1 使用多个构造方法在ruby中没有像c++或者ruby中的构造器,可是我们依然能够创建出类似的多个构造器:[code="ruby"]class ColoredRectangle def initialize(r, g, b, s1, s2) @r, @g, @b, @s1, @s2 = r, g, b, s1, s2 end def Color...2008-01-16 00:25:51 · 97 阅读 · 0 评论 -
ruby way之连接数据库
这边都只是个大概,具体的要自己去看文档了.1 连接SQLite:[code="java"]require 'sqlite'db = SQLite::Database.new("library.db")db.execute("select title,author from books") do |row| p rowenddb.close...2008-01-14 00:47:31 · 118 阅读 · 0 评论 -
ruby way之高级数据存取
经常我们需要以一种更透明的方式来存储和得到数据.Marshal模块提供了简单的对象持久化,PStore 库建立在这项技术之上。dbm 库使用像hash一样并永久的存贮在磁盘上.1简单的Marshaling经常我们需要创建一个对象,然后为了以后的使用保存它.ruby对这种对象持久化(或者说是Marshaling)提供了基本的支持.Marshal 模块能够使程序员序列化和反序列化一个r...2008-01-13 02:31:01 · 150 阅读 · 0 评论 -
rails2中的一些被废弃的用法
这些只是自己最近看web开发敏捷之道的时候(由于书中的版本是1.2,而我自己的是2.0),遇到的一些问题.1 原来的render_{something}都被替换成了render :something 2 controller中的几个实例方法比如@params,@session,@flash,@request和@env都被相应的params,session,flash,request...2008-01-29 00:33:11 · 90 阅读 · 0 评论 -
ruby way之使用REXML解析xml
REXML 是一个完全用ruby写的processor ,他有多种api,其中两个经典的api是通过DOM-like 和SAX-like 来进行区分的。第一种是将整个文件读进内存,然后存储为一个分层的形式(也就是一棵树了).而第二种是"parse as you go",当你的文件很大,并且内存受到限制的时候,比较适合用这种。看下面的book.xml:[quote] ...2008-01-30 00:35:10 · 154 阅读 · 0 评论 -
一个简单的ruby Metaprogram的例子
比如下面一个文件 people.txt[quote]name,age,weight,height"Smith, John", 35, 175, "5'10""Ford, Anne", 49, 142, "5'4""Taylor, Burt", 55, 173, "5'10""Zubrin, Candace", 23, 133, "5'62008-03-03 23:49:06 · 139 阅读 · 0 评论 -
Ruby Object Model
刚好看到,保存一下.2008-03-03 19:29:04 · 109 阅读 · 0 评论 -
一个检测方法的参数类型的小程序
今天没事看blog的时候,看到一个小子实现了这个,不过他的程序写的那叫一个丑陋,实在是看不下去,就自己写了个.原理很简单,那就是首先将要检测的方法重命名掉,然后动态定义一个相同的,这时他就会调用我们定义的这个方法,这时我们就可以检测参数的类型的,检测如果成功,在最后调用我们刚才重命名过的那个方法:[code="ruby"]class Object class =0 and ...2008-03-02 22:48:06 · 152 阅读 · 0 评论 -
rails中的BlankSlate源码分析
其实这个类实现的功能很简单,那就是实现一个没有predefined 方法的类(除了__send__与__id__).自己也尝试着写了一个,思路什么和BlankSlate很接近,不过代码就丑陋多了。当写这段代码之前,我们先要分析一下如何才能去掉predefined的方法,这里有三种predefined的方法。1 Object类本身自带的一些实例方法.2 打开Kernel模块,...2008-02-28 23:27:59 · 138 阅读 · 0 评论 -
ruby中的类变量与类实例变量
首先,在ruby1.8中类变量是所有子类和父类共享的,可以看下面的代码:[code="ruby"]class IntelligentLife @@home_planet = nil def self.home_planet @@home_planet end def self.home_planet=(x) @@home_planet...2008-02-26 21:15:50 · 148 阅读 · 0 评论 -
在ubuntu上共存多个版本的ruby
今天装Revactor库的时候,真把我郁闷了,没想到ubuntu源里面的ruby1.9装了之后,根本不能用gem来安装Revactor.最后google到了一篇文章,原来是要自己编译ruby1.9,然后才能正常使用gem.源里面安装的ruby1.9,什么都没有,gem,rake什么的都没有,所以我们要自己编译,安装.原文在这里:http://blog.michaelgreenly....2008-02-24 15:20:11 · 218 阅读 · 0 评论 -
看到了一个用ruby写的scheme解释器
:oops: ,自己本来想等啥时候有时间做个类似的东西呢,没想到已经有人做了,哈哈...啥也不说了,准备最近研究研究这个代码...地址在这里:http://bus-scheme.rubyforge.org/PS:这个竟然用的是git,哈哈,看来是被linus大叔给鼓动了.....2008-02-16 21:35:53 · 190 阅读 · 0 评论 -
ruby way之处理RSS和Atom
1 rss 标准库RSS 是基于xml的,因此你能简单的将它作为一个xml来进行解析.可是,事实上他有一个更高级别的专有的解析器来解析他.此外RSS的标准也很混乱。他有很多不便,就是标准的版本的不兼容,RSS有0.9, 1.0, 和2.0的版本.RSS的版本,就像制造热狗,就是一些除非你一定要知道,否则你不想要知道的细节.ruby有一个标准RSS库,它包含0.9,1.0和2...2008-01-31 01:32:59 · 124 阅读 · 0 评论 -
ruby way之Io之二
1 检测文件是否存在及其大小FileTest的 exist?方法可以检测一个文件是否存在:[code="ruby"]flag = FileTest::exist?("LochNessMonster")flag = FileTest::exists?("UFO")# exists? is a synonym for exist?[/code]如果我们想要知道文件是否有...2008-01-09 00:38:11 · 144 阅读 · 0 评论 -
ruby way之IO之一
1 打开和关闭一个文件类方法File.new 打开一个文件,并将它实例化为一个File对象,他的第一个参数是文件名.可选的第二个参数叫做 mode string(这个也是从c得来的).他的意思是怎样打开一个文件(读,写或者其他的).默认是'r'(也就是读).[code="ruby"]file1 = File.new("one") # Open for reading...2008-01-05 21:44:33 · 93 阅读 · 0 评论 -
ruby way之正则表达式之二
无语了,写好的blog,不小心按了刷新键,全没了........7 使用字符类字符类也就是包裹在中括号里面的一堆字符.他所匹配的是中括号里面的任意一个字符。[code][aeiou] #匹配 a,e,i,o,u中的任意一个字符 [/code] 要注意在他里面的那些特殊字符比如.?之类的将全部只能表示他们字面上的意思,而\n之类的能正常转义[code][a?s...2007-12-11 22:21:25 · 118 阅读 · 0 评论 -
ruby way之正则表达式之一
在ruby中内置了正则表达式,如果你的ruby版本是1.9或者更后面的版本的话,你的正则表达式引擎将会是一个叫做Oniguruma的东西。这是一个新的引擎,代替了1.8版本中的这则表达式引擎,我们后面会介绍到它。1编译正则表达式:正则表达式能够使用Regexp.compile 方法进行编译(这个方法同Regexp.new方法是同义的),参数可以是一个字符串或者一个正则式(这边要注意...2007-12-11 01:18:55 · 117 阅读 · 0 评论 -
ruby way之string之四
31 删除指定的字符:delete方法接受一个字符参数,然后从一个指定的字符串中删除这个字符(是删除所有的,而不只是第一个):[code]s1 = "To be, or not to be"puts s2 = s1.delete("b") # "To e, or not to e"s3 = "Veni, vidi, vici!"puts s4 ...2007-12-08 20:04:21 · 111 阅读 · 0 评论 -
ruby way之string之三
21 在字符串中插入表达式#{}做的就是这个,在{}中的所有表达式,都会自动计算,看下面的例子:[code]temp_f="ff"temp_c="cc"b=2a=1c=3word="cdafr"puts "#{temp_f} Fahrenheit is #{temp_c} Celsius" #ff Fahrenheit is cc Celsiusputs ...2007-12-07 15:48:39 · 121 阅读 · 0 评论 -
ruby way之string之二
接着昨天的。11 控制字符串的大小写 。downcase 方法可以转换一个字符串为小写,upcase可以转换一个字符串为大写.capitalize 方法强迫字符串第一个字符为大写,其他的字符为小写。[code]s1 = "Boston Tea Party"puts s2 = s1.downcase # "boston tea party"puts...2007-12-05 23:26:46 · 97 阅读 · 0 评论 -
ruby way之string之一
ruby本来很早就要开始看了,不过最近才真正开始看,那本宝石书还差最后1章就读完了,于是开始看the ruby way了,于是在这边做个记录,也算是督促自己吧..ruby中的string可以使用多种方式来表示.1 单引号,这种表示支持的转义最少,只支持单引号的转义和\的转义:[code]'bobo' ->bobo'bobo\'\\' -> bobo'\'bobo\t' -> b...2007-12-05 01:02:39 · 124 阅读 · 0 评论 -
一个创建闭包的小技巧
一个小技巧,在Ola Bini 的blog上看到的。假设你想要这样一个类:创建这个类的时候send一个block给它,然后在后面可以通过某个方法名来调用这个block。[code="ruby"]class DoSomething def initialize (class ...2008-06-05 00:12:10 · 147 阅读 · 0 评论 -
解决Colored Cubes问题
Engineering PuzzleYou have four colored cubes. Each side of each cube is a single color,and there are four colors: blue (B), red (R), green (G) and yellow (Y)Describing the six faces as fron...2008-06-02 10:43:11 · 147 阅读 · 0 评论 -
ruby way之国际化之一
这边有几个概念先看一下:[quote]为了将软件多语言化,首先进行植入能够使用各种语言的设计和方法等的国际化操作(internationalization 118N)。然后针对各种语言,进行能够使用该语言的地区化(localization、L10N)的操作。进行了多种语言的地区化,用户能够切换成自己想使用的语言时的状态称为多语言化(multilingualization、M17N)...2007-12-15 01:45:48 · 121 阅读 · 0 评论 -
ruby way之国际化之二
5规范化unicode字符串这张没什么意思,它讲的是将一些拉丁文的音调和表示分开来表示,比如"é" 可以表示为e 和'.对我们来说,没有多大的用处,就不说了。不过这张介绍了一个unicode的库,大家想看的话可以去看看http://www.yoshidam.net/Ruby.html6字符串的排序这张也是没多少意思,对我们来说,这张讲的是对拉丁文,西班牙文...2007-12-16 03:26:58 · 141 阅读 · 0 评论 -
ruby way之Enumerables
Enumerable 模块是一个很重要的模块,ruby中的很多类都有mix这个模块,比如array,hash等等。因此如果你想要自己定义一个collection,则不要继承一个存在的collection,而是应该mix Enumerable 模块。数组是最常用,最有代表性的mix Enumerable模块的一个集合。因此下面的都会默认用数组来举例子1 inject方法先看一...2008-01-02 00:03:59 · 121 阅读 · 0 评论 -
ruby way之hashes
1创建一个hash就想创建一个数组一样,我们能够使用Hash的[]方法来创建一个hash:[code]puts a1 = Hash.[]("flat",3,"curved",2)puts a2 = Hash.[]("flat"=>3,"curved"=>2)puts b1 = Hash["flat",3,"curved",2]puts b2 = Ha2007-12-30 12:01:20 · 99 阅读 · 0 评论 -
ruby way之Arrays
1 创建和实例化一个数组类方法[]能够创建一个数组,这里有3种方法使用[]来创建一个数组:[code]a = Array.[](1,2,3,4)b = Array[1,2,3,4]c = [1,2,3,4][/code]这里还有一个方法叫做new也可以创建一个数组,它可以接受0,1或者2个参数,第一个参数是数组的大小,第二个参数是数组中每一个元素的默认值。...2007-12-27 00:41:01 · 80 阅读 · 0 评论 -
ruby way之Ranges
1 1个简单的数字区间我们能这样表示:[code] digits = 0..9scale1 = 0..10scale2 = 0...10[/code]其中..包括结束点,...不包括结束点,也就是说digits和scale2的表示范围是一样的.在ruby中,不只是数值可以用作区间,任何ruby对象都可以用作区间。可是并不是所有的表示都有意义或者有用。接下...2007-12-23 17:27:13 · 79 阅读 · 0 评论 -
ruby way之Symbols
1 symbols简介在ruby中一个symbol就是一个Symbol类的实例,他的语法也就是简单的一个冒号后面跟着一个声明.一个symbol就像一个字符串,可是它和字符串所不同的是每一个symbol都只有一个实例。我们举个例子:[code]array = ["foo", "foo", "foo", :foo, :foo, :foo][/code]在这个例子中字符串...2007-12-23 02:12:11 · 104 阅读 · 0 评论 -
ruby way之数值计算之三
1定积分的计算我么可以使用Riemann sum来计算积分:[code]def integrate(x0, x1, dx=(x1-x0)/1000.0) #也就是求一个函数在x0到x1区间的积分 x = x0 sum = 0 loop do y = yield(x) sum += dx * y x += dx break ...2007-12-20 22:56:18 · 122 阅读 · 0 评论 -
ruby way之数值计算之二
1 处理复数标准库complex 能使我们处理复数。一个复数的创建能使用Complex来构造:[code]require 'complex'puts Complex(1,2) # 3+5i[/code]方法im能够转换一个数字为虚数:[code]puts a = 3.im # 3iputs b = 5 - 2.im # 5-2i[/code...2007-12-19 23:07:48 · 171 阅读 · 0 评论 -
ruby way之数值计算之一
1 在ruby中表示数值直接表示:237 或者+237表示一个正数(如果超出范围,那他就是一个无符数)-237 表示一个负数当一个数字太长的话,可以用_将它分割,比如1048576和1_048_576 是一样的。在ruby中还可以用0b,0,0x分别表示2进制,8进制和16进制的数:[code]0b10010110 # 二进制0b1211 ...2007-12-18 23:43:09 · 213 阅读 · 0 评论 -
ruby1.9中的Iterators
在ruby1.9中增加了External Iterators这中新的迭代类型,所有的Enumerable 都是External Iterators.而在ruby1.9之前的版本中的迭代都是internal iterator。何为external iterator呢,其实我认为也就是一个生成器了:[code="ruby"]iterator = 9.downto(1) ...2008-03-05 22:37:03 · 115 阅读 · 0 评论