广州明生堂生物科技有限公司


几个Ruby小技巧分享

网络编程 几个Ruby小技巧分享 06-21

代码块的序列调用

def touch_down  

  yield [3, 7]  

  puts "touchdown!"  

end  

  

touch_down do |(first_down, second_down)|  

  puts "#{first_down} yards on the run"  

  puts "#{second_down} yards passed"  

end  

  

=> "3 yards on the run"  

=> "7 yards passed"  

=> "touchdown!"

主要是说array在block中的使用

从array中取出元素

>> args = [1, 2, 3]  

>> first, rest = args  

  

>> first  

=> 1  

  

>> rest  

=> [2, 3]

之前只是清楚split序列的用法,没有注意到实际上,我们可以方便的得到剩余的序列。

Hash#fetch

>> items = { :apples => 2, :oranges => 3 }  

=> items = {:apples=>2, :oranges=>3}  

  

>> items.fetch(:apples)  

=> 2  

  

>> items.fetch(:bananas) { |key| "We don't carry #{key}!"}  

=> We don't carry bananas!

在散列的使用的时候,fetch可能会比检查是否存在值要方便一些。

创建代码段的散列

>> smash = Hash.new { |hash, key| hash[key] = "a #{key} just got SMASHED!" }  

=> {}  

  

>> smash[:plum] = "cannot smash."  

=> {:plum=>"cannot smash."}  

  

>> smash[:watermelon]  

=> {:plum=>"cannot smash.", :watermelon=>"a watermelon just got SMASHED!"}

将代码段用于生产散列可以方便的保持一些未定义的初始值,特别是在斐波纳契计算中很适合(我没有看出来怎么用)

Array#sort_by

>> cars = %w[beetle volt camry]  

=> ["beetle", "volt", "camry"]  

  

>> cars.sort_by { |car| car.size }  

=> ["volt", "camry", "beetle"]

序列的sort_by方法用来对代码段的返回值排序,就如同对于Symbol#to_proc进行map或者sort

String#present?

>> "brain".present?  

=> true  

  

>> "".present?  

=> false

Rails的开发者可能对于blank?比较熟悉,然而对于present呢?实际上判断返回值是否正确这也是很好用的方法。

这里我确实想起来,对于find(:all)和find(:first)是否有返回值的判断的不同。还有一个

.exists?
.empty?
.blank?
.nil?

比较多见到吧

Ruby优化继承类实例
在Rails的原则里有简化Controller,丰富Model的说法。下面将用一个示例展示一个简单的继承优化。特别是你的method里有一个写变化的self变量的时候。假设

Ruby连接使用windows下sql server数据库代码实例
require'win32ole'classSqlServer#Thisclassmanagesdatabaseconnectionandqueriesattr_accessor:connection,:data,:fieldsdefinitialize@connection=nil@data=nilenddefopen#OpenADOconnectiontotheSQLServerdatabas

Ruby遍历文件夹同时计算文件的md5sum
#!/usr/bin/ruby-w#require'digest/md5'ifARGV.emptyputs"usgae:#$0path"exit0enddir_name=ARGV.shiftdefdir_md5sum(path)md5s=Array.newifFile.directory(path)Dir.new(path).eachdo|file|nextiffile=~/^.+$/file=


编辑:广州明生堂生物科技有限公司

标签:序列,代码,返回值,实例,是在