• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >ruby > 21个你应该知道的Ruby编程技巧

21个你应该知道的Ruby编程技巧

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了ruby编程,ruby元编程,ruby编程语言,ruby元编程 第2版 pdf,ruby编程工具等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

1. 快速获取正则表达式的匹配值

通常我们使用正则表达式,都是先match,然后再取结果,但是这样有时候会抛异常,看下面例子:

email = "Fred Bloggs "

email.match(//)[1] # => "fred@bloggs.com"

email[//, 1] # => "fred@bloggs.com"

email.match(/(x)/)[1] # => NoMethodError [:(]

email[/(x)/, 1] # => nil

email[/([bcd]).*?([fgh])/, 2] # => "g"
</div>

上面例子中还有一种更简单的方法,就是使用 String#[]方法,可以直接匹配正则表达式,更简洁,虽然看起来使用了魔鬼数字。
当然你可以省略掉那个魔鬼数字,如果仅匹配一次的话:

x = 'this is a test'

x[/[aeiou].+?[aeiou]/] # => 'is i'
</div>

这个例子中,我们匹配规则“先匹配一个元音,然后一个辅音,再接着一个元音”。

2. Array#join!的快捷实现

我们知道Array的*操作,是将数组里面的元素成倍的增加:

[1, 2, 3] * 3 == [1, 2, 3, 1, 2, 3, 1, 2, 3]
</div>

但是当乘因子不是数字是字符串会出现什么效果?

%w{this is a test} * ", " # => "this, is, a, test"

h = { :name => "Fred", :age => 77 }

h.map { |i| i * "=" } * "n" # => "age=77nname=Fred"
</div>

对了,这就是join!的效果。因此可以用这种方式来快捷地实现join!操作。

3. 快速格式化十进制数字

格式化浮点数字的精度显示通常使用sprintf这个函数,可是有一种更快捷的方式,使用字符串。

money = 9.5

"%.2f" % money # => "9.50"
</div>

4. 快速解析字符串

在技巧3中我们看到了数字的格式化,这里就说一下字符串格式的快捷方式。

"[%s]" % "same old drag" # => "[same old drag]"
</div>

这里的意思是将”same old drag”显示到[]中。
我们再看一下具体的格式化方法:

x = %w{p hello p}

"%s" % x # => "

hello

”</div>

5. 递归删除文件和目录

FileUtils提供了这种方法:

require 'fileutils'

FileUtils.rm_r 'somedir'
</div>

还有一个方法是FileUtils.rm_rf,与linux上的 rm -rf 对应。

6. 快速穷举可枚举对象

使用*操作可以快速的穷举出可枚举对象中的所有元素,像Array,Hash这种对象。

a = %w{a b}

b = %w{c d}

[a + b]                              # => [["a", "b", "c", "d"]]

[*a + b]                             # => ["a", "b", "c", "d"]
</div>

这里*操作符的优先级低于+操作符。


a = { :name => "Fred", :age => 93 }

[a]                                  # => [{:name => "Fred", :age =>93}]

[*a]                                 # => [[:name, "Fred"], [:age, 93]]


a = %w{a b c d e f g h}

b = [0, 5, 6]

a.values_at(*b).inspect              # => ["a", "f", "g"]
</div>

7. 消除临时变量

我们有时候需要写一个临时变量如一个临时的Array,有一种方式可以不用单独定义临时变量:

(z ||= []) << 'test'
</div>

当然这不是一种很好的编程习惯,建议不要大量在代码中使用。

8. 使用非字符串或非Symbol对象作为Hash的Key

或许你从来没有尝试过使用非String或非Symbol对象作为Hash的Key,但是确实是可以的,有时候还蛮有用。

does = is = { true => 'Yes', false => 'No' }

does[10 == 50]                       # => "No"

is[10 > 5]                           # => "Yes"
</div>

9. 使用and或or将多个操作组合到一行

这个技巧很多熟练的Ruby程序员都会使用,用来替代if和unless这种短行代码。

queue = []

%w{hello x world}.each do |word|

  queue << word and puts "Added to queue" unless word.length <  2

end

puts queue.inspect


# Output:

#   Added to queue

#   Added to queue

#   ["hello", "world"]
</div>

但是注意,这种方式,若and左边表达式“queue << word”返回nil则“puts "Added to queue"”不会被执行,

您可能想查找下面的文章:

  • Ruby和元编程之万物皆为对象
  • 使用ruby部署工具mina快速部署nodejs应用教程
  • ruby元编程实际使用实例
  • 21个你应该知道的Ruby编程技巧
  • Ruby的语法和语言特性总结
  • Ruby设计模式编程中对外观模式的应用实例分析
  • Ruby设计模式编程中使用Builder建造者模式的实例
  • Ruby设计模式编程之适配器模式实战攻略
  • Ruby元编程的一些值得注意的地方
  • Ruby编程中的命名风格指南

相关文章

  • 使用Ruby程序实现web信息抓取的教程
  • ruby 对象的初始化 方法
  • Ruby程序中正则表达式的基本使用教程
  • Ruby实现的最优二叉查找树算法
  • ruby 异常处理:ensure
  • 详细解析Ruby中的变量
  • Ruby中的数组和散列表的使用详解
  • Ruby on Rails中jquery_ujs组件拖慢速度的问题解决
  • Ruby简洁学习笔记(二):类继承、属性、类变量
  • 深入剖析Ruby设计模式编程中对命令模式的相关使用

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Ruby中实现统计文件行数、单词数和字符数
    • Ruby中创建字符串的一些技巧小结
    • Ruby中关于模块的一些基础知识
    • 实例解析Ruby中的数值类型以及常量
    • Ruby基础知识之数据类型
    • 使用Ruby实现FTP密码破解
    • Ruby on rails安装后去掉DL is deprecated,please use Fiddle警告信息的方法【测试可用】
    • Ruby中XML格式数据处理库REXML的使用方法指南
    • windows和linux下Ruby的下载与安装
    • 几个Ruby小技巧分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有