几乎所有的现代编程语言都提供了&&操作符,ruby也不例外。我想每个人都知道&&的用法。但是在ruby中,利用&&可以实现一些“诡异”的用法,如下例子:
1. 基于这样一个事实:几乎ruby中的所有expression都有返回值(甚至if,case等等),例如:
a = 10 + 20 # => 30
some_bool = true # => true
利用这样的事实,怎么和&&一起“妙用”呢?现在假设有一个数组,比如[1,2,3,"woody",4,"woody"],我们要写一段程序,在遍历数组的时候,如果碰到元素"woody",则将其打印出来,但是只打印一次;如果是其他元素,则执行其他操作。通常,在其他语言中,我们会使用一个flag来完成,比如:
flag = false
arr = [1,2,3,"woody",4,5,"woody"]
for e in arr
if e == "woody" && !flag
p e
flag = true
end
end
在ruby中,我们可以利用上面提到的原理,如下编码:
flag = false
arr = [1,2,3,"woody",4,5,"woody"]
for e in arr
p e if e == "woody" && !flag && (flag = true)
end
if?flag=true?通常其他程序员看到这样的代码会坚信是错误的,C#在编译过程就会报错。但是,在ruby中,你确实可以使用这样的“九阴真经”。尽管,这可能不是一个好的编程习惯,但是,在一些情况下,这样做确实可以使你的ruby代码简洁很多。
(这里,Enumerable中的方法我们就先不考虑了。或许这个例子举得不是很好~)
2. 同样还是基于expression的返回值,考虑如下代码:
(1+2)&&(3+4) #=> 7
ruby会对&&左右的expression进行计算,至于返回值,当然如果左端操作不为nil或者false的话,就返回右端计算结果。这里,如果结合Array的构造函数,我们可以用如下代码,十分简洁的生成斐波那契数列:
x,y = 0,1
Array.new(10) {|i| [0,1].include?(i) ? 1 : (x,y = y,x+y)&&(x+y) }
#=>[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
反正我是想了半天,没想到在C,C++或者C#中使用什么高级方法能写出更简洁的代码
3...
4...
分享到:
相关推荐
[Pragmatic Bookshelf] Ruby 1.9 & 2.0 编程 (英文版) [Pragmatic Bookshelf] Programming Ruby 1.9 & 2.0 The Pragmatic Programmers' Guide 4th Edition (E-Book) ☆ 出版信息:☆ [作者信息] Dave Thomas , ...
Effective Ruby:改善Ruby程序的48条建议.pdf 、metaprogramming、Ruby元编程、Head First Rails 、Rails 指南、Ruby Best Practices、Ruby on Rails教程、ruby基础教程(中文第四版)、The RSpec Book
ROR开发安装环境整包,包含ruby1.8.7,rails2.3.8,以及9个相关依赖的gems,一次下载基本上就可以把ROR环境建成。
Ruby is the fastest growing and most exciting dynamic language out there. If you need to get working programs delivered fast, you should add Ruby to your toolbox. This book is the only complete ...
Ruby语言教程&案例&相关项目资源 Ruby语言教程&案例&相关项目资源 Ruby语言教程&案例&相关项目资源
ruby 工程在eclipse下的开发需要的插件,很好用的,找了好长时间,才找到,ROR\rubyIDT&RadRails.rar
Ruby语言教程&案例&相关项目
今天我们要探讨一下Ruby中的一元操作符重载。 一元操作符有:+ – * ! & 等,为了避免与数值的 + – 混淆,重载一元操作符,要在后面加上一个 @ 操作符。 1. 一个简单的一元操作符重载例子:-@ 操作符 我们以String...
Programming Ruby 2.0 1.9 pdf
Ruby语言教程&案例&相关项目资源分享.docx
ruby对excel的操作 详细描述ruby对excel的操作
Ruby中文文档.CHM 方便ruby or rails学习.
ruby中文教程,从基础到深入的让你学习ruby
ruby中英文api 适合于初学者。 希望能给大家带来一些帮助
Ruby中文教程及相关源代码 Ruby中文教程及相关源代码 Ruby中文教程及相关源代码
ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码
Ruby是一种功能强大的面向对象的脚本语言,她可以使您方便快捷地进行面向对象编程.Ruby使文本处理和系统管理变得简单,与Perl非常相似.一句话:简单明了,扩展性强,移植性好. Ruby的几大亮点: 语法简单 垃圾回收 ...
ruby文件操作
Http Client - 在Ruby中提供类似libwww-perl(LWP)的功能