ruby学习笔记(4)

本节课主要4部分内容如下:Ranges、Blocks and Procs、Random Numbers、Read/Write Text Files
4.1 Ranges
    1)序列的定义:有起始值、结束值并且能够获取连续值的数据结构
    2)使用.. 或者 ...声明序列,
        注意:..包含最大值,...不包含最大值
        如 (1..3)  #结果是1,2,3
           (
13)  #结果是1,2
    3)ruby使用Range对象处理序列,(1..3)就作为一个Range对象.Range.to_a方法将Range转换为Array
       如 (1..10).to_a -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    4)可以使用===判断序列中是否有指定的值
    如
        (1..10) === 5       -> true 
        (1..10) === 15      -> false 
        (1..10) === 3.14159 -> true 
        ('a'..'j') === 'c'  -> true 
        ('a'..'j') === 'z'  -> false

4.2 Blocks and Procs
    1)block是一组代码段(grouping statements),它根据上下文的语义执行.
    2)block 单行定义用{},多行定义使用do end
    3)可以使用yield在方法中调用多次相关的block
    如
        def call_block 
            puts 
'Start of method' 
            yield    #在方法中调用block{puts 
'In the block'}
            yield 
            puts 
'End of method' 
        end 
        call_block {puts 
'In the block'}    
    4)code Block的返回值和方法类似,将最后一行的表达式作为返回值
    5)block不是对象,但可以通过kernel的lambda方法转换成Proc对象,
        然后可以通过Proc的call调用block
        prc = lambda {puts 'Hello'}  #将block{puts 'Hello'}转换成对象
        prc.call                                #调用Proc对象的call方法执行block
    注意:block有点回调函数的概念,它根据上下文执行具体的code
   
4.3 Random Numbers
    1)ruby使用rand产生随机数
    2)rand(x)将生成大于0小于5的随机整数
  
4.4    Read/Write Text Files
    1) File.open 打开文件,可以指定打开方式:'r' Read-only、(default); 'r+' Read/Write、'w' Write-only
    2) 使用Find module来获取文件夹下的内容 Find.find("./") #获取当前路径下的所有文件
    3) Ruby Object Serialization
        使用Marshal.dump Saving an object and some or all of its components
        使用Marshal.load econstitute the object

4.5 总结
    * Sequences have a start point, an end point, and a way to produce successive values in the sequence. In Ruby, these sequences are created using the ".." and "" range operators.
    
* The two dot form creates an inclusive range, and the three-dot form creates a range that excludes the specified high value.
    
* In Ruby, the sequence 1..100000 is held as a Range object containing references to two Fixnum objects.
    
* The .to_a method converts a Range to an Array.
    
* Another use of the versatile range is as an interval test: seeing if some value falls within the interval represented by the range. We do this using ===, the case equality operator.
    
* Ranges are not limited to integers or numbers. The beginning and end of a range may be any Ruby object.
    
* IMPORTANT: Ruby Code blocks are chunks of code between braces or between do- end that you can associate with method invocations.
    
* Code blocks may appear only in the source adjacent to a method call; the block is written starting on the same line as the method call's last parameter (or the closing parenthesis of the parameter list).
 The code in the block is not executed at the time it is encountered. Instead, Ruby remembers the context in which the block appears (the local variables, the current object, and so on) and then enters the method.

    * The Ruby standard is to use braces for single-line blocks and do- end for multi-line blocks. Keep in mind that the braces syntax has a higher precedence than the do..end syntax.
    
* Inside a method, you can call a Ruby block using the yield keyword with a value.
    
* You can provide parameters to the call to yield: these will be passed to the block. Within the block, you list the names of the arguments to receive the parameters between vertical bars (|).
    
* Blocks are not objects, but they can be converted into objects of class Proc. This can be done by calling the lambda method of the module Kernel.
    
* Remember you cannot pass methods into other methods (but you can pass procs into methods), and methods cannot return other methods (but they can return procs).
    
* The method to get a randomly chosen number in Ruby is rand.
    
* If you call rand, you'll get a float greater than or equal to 0.0 and less than 1.0. If you give it an integer parameter (by calling rand(5) ), you will get an integer value greater than or equal to 0 and less than 5.
    * The File.open method can open a file in different modes like 'r' Read-only, starts at beginning of file (default); 'r+' Read/Write, starts at beginning of file; 'w' Write-only, truncates existing file to zero length or creates a new file for writing.
    
* File.open opens a new File if there is no associated block. If the optional block is given, it will be passed file as an argument, and the file will automatically be closed when the block terminates.
    
* Always close a file that you open. In the case of a file open for writing, this is very important and can actually prevent lost data.
    
* The seek method of class IO, seeks to a given offset an Integer (first parameter of method) in the stream according to the value of second parameter in the method. The second parameter can be IO::SEEK_CUR - Seeks to first integer number parameter plus current position; IO::SEEK_END - Seeks to first integer number parameter plus end of stream (you probably want a negative value for first integer number parameter); IO::SEEK_SET - Seeks to the absolute location given by first integer number parameter.

4.6 原文链接

posted on 2007-10-23 17:59 想飞就飞 阅读(3215) 评论(1)  编辑  收藏 所属分类: ROR

评论

# re: ruby学习笔记(4) 2008-01-27 12:35 张晓婷

我因为是刚开始学习用c++编程,我在网上找到了这里,问一个很蠢的问题可以吗?怎么样在code Blocks中用平方根?我的邮箱::zxtjlu@yahoo.ca,
thank you for your time.  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

公告


导航

<2007年10月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

统计

常用链接

留言簿(13)

我参与的团队

随笔分类(69)

随笔档案(68)

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜