Ruby最近是一个比较热门的词汇,许多程序员都开始将目光转向这项语言。它存在着许多惯用法,下面就向大家总结了一些Ruby惯用法,作为参考对象。
迭代
一般写法:
for i in (1..10) puts i end
习惯写法:
(1..10).each{|i| puts i}
或
1.upto(10){|i| puts i} # from njmzhang
||=赋值
一般写法:
number = 1 if number.nil? number = 1 unless number
习惯写法:
number ||= 1
程序入口
if __FILE__ == $0
或
if $PROGRAM_NAME == __FILE__
这个相当于main(), 逻辑判断的意思当程序名($0或另一个)和当前文件名(__FILE__)一致时,也就是当前文件是被单独执行的而不是被别的文件调用。这个方法还有个用法是作为unit test使用。
预设变量和特殊记号
类似$0的Perl风格预设常量还有很多,参见Programming Ruby p319
其中比较常用的如$:代表库搜索路径,修改方法常见有: 代码$:.unshift('buildscript') # from gigix 或 $: << File.join(File.dirname(__FILE__), 'CurrentClass')
后一种方法使用了相对路径,因为Ruby的module不要求namespace和文件目录结构要对应一致,很多时候统统放一个目录里
%w格式化命令(from qiezi) 可以少打几个引号
%w{a b c d} #
等价
['a', 'b', 'c', 'd']
``(~键下的撇号)用来执行shell外部命令,如:
`help`
inject
一般写法:
result = [] (1..10).each{|item| result << item}
习惯写法:
(1..10).inject([]){|array, item| array << item}
inject有点难理解,相当于python的reduce和一些FP里的fold。inject的块变量有两个(这里是array和 item),第二个变量(item)用来枚举被inject的集合(这里是(1..10)这个range), 而第一个变量(array)由inject的参数初始化(这里是[],可选),并在block被反复执行时保持持久(相当于静态变量),而item则在每次枚举时被更新为下一个值。
我们再看一下inject的另一种通常用法就会更明白了:
求和
(1..10).inject{|sum, item| sum += item}
这个等于
(1..10).inject(0){|sum, item| sum += item}
也就是块变量sum被初始化成0然后反复迭代执行块的内容,最后返回sum,并行赋值 这个很多人都知道了,比如:
a,b = 0, 1 a,b = b, a #
交换
a,b
当然可以延伸出一些很诡异的变化,不提倡使用阿。
还有一个用法是让函数返回“多个结果”(不是多个对象),如:
def test 1,2 end x, y = test #x = 1, y = 2
这个njmzhang说的很对,其实函数返回的是一个array,然后再并行匹配到变量上去。(所以我对多个结果特别加了引号) 这显然是个syntax sugar,你随便用逗号分割几个变量是不会自动组成array的。
注意这种并行匹配当两遍不平衡时会造成的问题:
a,b = [1,2,3] # a = 1, b = 2, 3
被丢弃
a,b,c = [1,2] # a = 1, b = 2, c = nil
被初始化成nil
*的匹配 一般来说*用于把一个array展开:
a, *b = [1,2,3] #a = 1, b = [2,3]
类似FP里的x:xs(haskell), x::xs(ocaml), [a | b] (erlang from 布娃娃)
rescue简单用法
begin 1/0 rescue puts 'wrong' end
可以简化为
1/0 rescue puts 'wrong'
原文:
http://developer.51cto.com/art/200912/169183.htm
分享到:
相关推荐
### Ruby惯用法详解 #### 一、简介 Ruby是一种简单快捷的面向对象的脚本语言,具有丰富的类库和简洁的语法结构。在实际开发过程中,为了提高代码的可读性和可维护性,Ruby社区形成了一系列约定俗成的惯用法(idioms...
该项目专注于常见的Ruby惯用语,并提供了一系列的代码改进示例,以提升代码性能。下面将详细探讨Ruby开发中的代码分析和度量,以及如何利用`fast-ruby` 提升代码效率。 1. **Ruby惯用语和最佳实践** Ruby中有很多...
此时我对初学者一些总结
在Ruby社区中,惯用法(idioms)和最佳实践(best practices)是提高代码质量的关键。本文将深入探讨Ruby中的关键技巧、重构方法以及遵循的代码风格指南。 一、Ruby技巧 1. 块和迭代器:Ruby中的块(blocks)和...
### Ruby语言教程对Ruby语法的总结 #### 一、变量与数据类型 **特点:** - **动态类型:** Ruby是一种动态类型的语言,这意味着你无需为变量声明具体的数据类型。 - **变量命名规则:** 变量名必须以小写字母或...
在Ruby的世界里,初学者可能会感到有些陌生,但掌握其基本使用流程将为你的编程旅程打下坚实的基础。本文将详细解析"ruby初始使用过程",帮助你快速上手。 首先,我们需要设置好开发环境。在Windows系统中,通常会...
Ruby Ruby Ruby Ruby Ruby Ruby
Ruby语言教程知识点详解重点总结 章节目录 1.Ruby语言简介与安装 2.Ruby基础语法 3.数据类型与变量 4.运算符与表达式 5.控制结构 6.函数与模块 7.类与对象 8.继承与多态 9.异常处理 10.文件与I/O操作 11.Ruby标准库...
### Ruby 教程《The Book of Ruby》知识点总结 #### 一、书籍基本信息 - **书名**:《The Book of Ruby》 - **作者**:Huw Collingbourne - **出版年份**:2011年 - **出版社**:No Starch Press - **ISBN-10**:1-...
### Ruby面向对象知识总结 #### 一、Ruby的面向对象特性 **Ruby**是一种完全面向对象的编程语言,这意味着在Ruby中,一切事物都是对象。无论是字符串、数字、布尔值甚至是`true`和`false`这样的基本数据类型,都是...
总结来说,`Ruby-rubybuild`是Ruby开发中非常实用的环境管理工具,通过`ruby-build`我们可以方便地编译和安装各种版本的Ruby,配合`rbenv`实现多版本的灵活切换,确保项目的稳定性和兼容性。无论你是初学者还是经验...
总结来说,Java适合大型和复杂的系统,.Net在Web开发中有一定竞争力,但需解决部署和前端问题;PHP在中小型企业Web应用中占据主导,且随着框架的成熟,其在企业级市场也有所突破;Ruby/ROR作为创新的象征,影响力虽...
ruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ...
### RUBY 教程知识点概览 #### 一、RUBY简介与特点 RUBY是一种纯粹的面向对象的脚本语言,由日本人松本行弘(Yukihiro Matsumoto)设计并开发。RUBY的设计哲学是代码可读性和效率并重,其语法简洁明了,易于理解和...
Ruby是一种纯面向对象的编程语言,拥有面向对象编程的三大特性:封装、继承和多态。类名在Ruby中必须以大写字母开始,象征着类名是常量。Ruby是一种基于行的语言,通常情况下,每遇到一个换行符就意味着一个语句的...
总结来说,通过下载的这三个文件,你可以在无外网环境下成功搭建Ruby 2.7.2环境,并安装RubyGems 3.1.5以及Redis 6.0.9。安装完成后,你可以进一步使用RubyGems安装所需的其他库,如Rails框架等,以满足实际项目的...
ruby2ruby 提供一些用来根据 RubyParser 兼容的 Sexps 轻松生成纯 Ruby 代码的方法。可在 Ruby 中轻松实现动态语言处理。 标签:ruby2ruby
### Ruby – 概览 #### 关于教程 Ruby 是一种由 Yukihiro Matsumoto(通常被称为 Matz)设计的脚本语言。它能够在多种平台上运行,包括但不限于 Windows、Mac OS 以及各种版本的 UNIX。本教程旨在为读者提供一个...
《Ruby完全自学手册》是一本完全覆盖Ruby和Ruby on Rails的完全自学手册。《Ruby完全自学手册》的特色是由浅入深、循序渐进,注重理论和实践的结合。虽然定位为入门手册,但是依然涉及许多高级技术和应用,覆盖到的...
Ruby是一种强大的、面向对象的脚本语言,广泛用于Web开发、服务器端编程和各种应用程序。在Ruby的世界里,管理不同的Ruby实现(如MRI、JRuby、Rubinius、MagLev和MRuby)是非常重要的,这有助于开发者根据项目需求...