Posts match “ ruby ” tag:

ruby 中的八进制

  • 八进制表示方式 用o代表无符号八进制
> irb                                                                                                                                                
2.2.0 :001 > puts 0233, 0o233, 0O233
155
155
155
  • 十进制转八进制
> irb                                                                                                                                                
2.2.0 :001 > 233.to_s(8)
 => "351"
  • 文本转八进制
> irb                                                                                                                                                
2.2.0 :001 > "11".to_i(8)
 => 9
2.2.0 :002 > "11".to_i(8) == 011
 => true

ruby中去除字符串空格的方法

使用 String#strip方法,去除所有空格

"    hello    ".strip   #=> "hello"

"\tgoodbye\r\n".strip   #=> "goodbye"
ruby 另外lstrip和rstrip分别去除字符串左右两端的空格
"  hello  ".lstrip   #=> "hello  "

"hello".lstrip       #=> "hello"

"  hello  ".rstrip   #=> "  hello"

"hello".rstrip       #=> "hello"

上述方法是返回字符串的copy,如要改变原字符串对象,使用 String#strip!, String#lstrip!, String#rstrip!。 如果对象没有改变则返回nil

"hello".rstrip!      #=> nil

ruby-新年快乐

根据网上的源码改编

 ruby -e "((1..20).to_a+[6]*4).each{|i|puts ('#'*i*2).center(80)};puts;puts 'Happy New Year'.center(80)"

关键是center方法

"Happy New Year".center(80)

就是将字符串在80个字符的长度内居中

打造你的加强版irb控制台

github地址

安装步骤

下载

git clone git://github.com/logankoester/irbrc.git

安装相关gems

(cd irbrc; rvm gemset import irbrc.gems)

如果没有装rvm,直接运行

 sudo gem install awesome_print bond hirb looksee map_by_method net-http-spy sketches what_methods wirble 

做文件连接

ln -s ~/irbrc/irbrc ~/.irbrc

运行irb

功能介绍

  1. 输出代码高亮

  2. irb运行历史记录,下次打开仍保留

  3. 将irb命令行提示缩短为 '>>'

  4. 输入'c'或'clear'清屏

  5. 可以通过tab实现代码补全

  6. 使用 fl(file_name) 命令来快速打开文件, rl 命令来重新打开最近文件, rt命令来打开最近文件并重新执行上一条语句

  7. pm方法,可以很漂亮的列出Object的所有methods

  8. 自动加载rubygems, 并加载下面几个gems

  • map_by_method
>a = ["1", "2", "3"]

>a.map_by_to_i

> => [1, 2, 3]

   实际上相当于 a.map &:to_i, 但更dsl点不是更好?
  • what_methods

猜方法名专用

>3.14.what? 3  #什么方法返回3?                                             

> 3.14.to_int == 3                                              
> 3.14.floor == 3                                               
> 3.14.round == 3                                               
> 3.14.to_i == 3                                                
> 3.14.prec_i == 3                                              
> 3.14.truncate == 3                                            
> => ["to_int", "floor", "round", "to_i", "prec_i", "truncate"] 
  • pp

用法 ap Object, 把一个Object格式华高亮输出

  • Sketches

可以在irb中使用文字编辑器, 可以参看 ihower的这篇文章

经实际测试,在使用what_methods时不知什么原因会自动打开sketches,可以编辑~/.irbrc,将135-136的sketeches代码注释掉

ruby数组填充方法

手册

array.fill(obj)  array
array.fill(obj, start [, length])  array
array.fill(obj, range )  array
array.fill {|index| block }  array
array.fill(start [, length] ) {|index| block }  array
array.fill(range) {|index| block }  array

前三个方法都是将obj填充到array里, start 默认为0, length默认为self.length长度

后三个方法是将block里的返回值填充到array里。block接收到的是array的元素index值。

实例代码

a = [ "a", "b", "c", "d" ]

a.fill("x")              #=> ["x", "x", "x", "x"]

#将数组里所有元素替换为"x"


a.fill("z", 2, 2)        #=> ["x", "x", "z", "z"]

#从数组第[2]位元素开始,替换 2 次 "z"


a.fill("y", 0..1)        #=> ["y", "y", "z", "z"]

#将数组[0]到[1]位的元素替换为"y"


a.fill {|i| i*i}         #=> [0, 1, 4, 9]

#提供block方法, i为数组下标


a.fill(-2) {|i| i*i*i}   #=> ['a', 'b', 8, 27]

#从数组第[-2]位开始运行block

#注意,ruby源码里的注释是错的

#a.fill(-2) {|i| i*i*i}   #=> [0, 1, 8, 27]

    
#实际应用, 我要生成一个数字从1到50的数组


 >>  Array.new(50).fill {|i| i+=1 }
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50]