Ruby中,&:(ampersand colon)的用法
2013-09-25 19:13
330 查看
前几日看Ruby代码,发现一个奇怪的用法,如下:
研究后知道,上面的用法等价于下面的代码:
第一种写法的原理是:
&操作符会调用Symbol#to_proc方法,所以&:upcase相当于
而Symbol#to_proc大概是这个样子滴:
知道了原理后,我们现在可以自己为String变量实现一个类似的功能:
参见:
1、http://stackoverflow.com/questions/1961030/ruby-ampersand-colon-shortcut
2、http://stackoverflow.com/questions/1217088/what-does-ampersand-colon-pretzel-colon-mean-in-ruby
a=['a', 'b', 'c'].map! &:upcase p a #["A", "B", "C"]
研究后知道,上面的用法等价于下面的代码:
a=['a', 'b', 'c'].map! &Proc.new{|item| item.__send__ :upcase } p a #["A", "B", "C"]
第一种写法的原理是:
&操作符会调用Symbol#to_proc方法,所以&:upcase相当于
&(:upcase.to_proc)
而Symbol#to_proc大概是这个样子滴:
def to_proc return Proc.new do |item| item.__send__ self end end
知道了原理后,我们现在可以自己为String变量实现一个类似的功能:
a='upcase'
class << a
def to_proc return Proc.new do |item| item.__send__ self end end
end
p ['a', 'b', 'c'].map! &a #["A", "B", "C"]
参见:
1、http://stackoverflow.com/questions/1961030/ruby-ampersand-colon-shortcut
2、http://stackoverflow.com/questions/1217088/what-does-ampersand-colon-pretzel-colon-mean-in-ruby
相关文章推荐
- Ruby中,&:(ampersand-colon,"与号-冒号")的用法
- 解决:ruby We're sorry, but something went wrong.We've been notified about this issue and we'll take a look at it shortly.
- linux : if (&amp;&amp;) and mail 用法
- and的用法(&)
- [No000011]Ruby之attr_reader,attr_writer,attr_accessor理解&用法
- Entity references or sequences beginning with an ampersand ‘&’ must be terminated with a semicolon ‘;’. 符号&必须要分号结束
- DevKit安装失败,Invalid configuration or no Rubies listed. Please fix 'config.yml' and rerun 'ruby dk.rb
- Ruby: attr_reader &attr_accessor用法
- ruby and watir中timeout类的用法
- sql and&or用法 实现jsp邮箱或者用户名登录
- android <viewStub />, <requestFocus />, <merge /> and <include />用法
- setAttribute and getAttribute的用法 以及阻止<a>的href的默认属性
- Rails requires RubyGems >= 1.3.1 (you have 1.2.0). Please `gem update --system` and try again.
- Ruby, JRuby, and Rails Application" 免费在线课程
- android <viewStub />, <requestFocus />, <merge /> and <include />用法
- android的xml中<viewStub />, <requestFocus />, <merge /> and <include />的用法
- (转)How to Install Xcode, Homebrew, Git, RVM, Ruby & Rails on Snow Leopard, Lion, and Mountain Lion
- &的三种用法(c,c++) and n&1.
- Rock And Roll & Goth 目录 (2005.03.22/ 整理和使用ShitMp3 修改MP3信息)
- Lightoj-1347 Aladdin and the Magical Lamp(后缀数组&&线段树)