ruby笔记

来源:百度文库 编辑:神马文学网 时间:2024/04/29 06:59:53

没有什么特别的原因开学学习Ruby,只是从兴趣出发

Programming Ruby 2nd Edition

Range

转化为数组很简单,to_a方法搞定:r = 3..12arr = r.to_a     # [3,4,5,6,7,8,9,10,11,12]digits = 0..9digits.include?(5) -> truedigits.min -> 0digits.max -> 9digits.reject {|i| i < 5 } -> [5, 6, 7, 8, 9]digits.each {|digit| dial(digit) } -> 0..9('a'..'z').to_a.each{|i| puts i}   #显示a到z的字符串r1 = 3..6r2 = 3...6     #....不包含上线6r1a, r1b = r1.first, r1.last    # 3, 6r1c, r1d = r1.begin, r1.end     # 3, 6r2a, r2b = r2.begin, r2.end     # 3, 6 (注意:不是3和5)r1 = "7".."9"r2 = "7".."10"r1.each {|x| puts x }   # 打印出7,8,9r2.each {|x| puts x }   # 未打印任何东西##为什么会出现这样的情况?这是因为这里都是字符串,由于r1中,"7"比"9"小所以,它是个合理的Range;而表达式r2中,"7"比"10"大,下限大于了上限,就不合理了。r1 = 23456..34567x = 14142y = 31416r1.include?(x)      # falser1.include?(y)      # true

迭代器

3.times { print "X " }1.upto(5) {|i| print i, " " }99.downto(95) {|i| print i, " " }50.step(80, 5) {|i| print i, " " }   #50至80之间步长5

数字

a -> 97 #ASCII值

读取文件

f=File.open("testfile")f.each{|line| puts line}f.close

Reading

line=gets   #从键盘输入负值给lineprint line  #打印line

Hash表

histogram = Hash.new() #新建一个Hash表histogram['key1'] -> 0histogram['key1'] = histogram['key1'] + 1histogram['key1'] -> 1histogram.default = "hello"  #没有定义的key会返回hello

Array

shift

char=[a,b,b,c].shift   #删除数组中的第一个字符puts char  # a
[1,3,5,7,9].find{|v| v*v < 30 }   #返回满足条件的第一个值["H", "A", "L"].collect {|x| x.succ }  #输下当前字符的下一字符[1,3,5,7,9].each{|i| puts i }   #遍历数组[1,3,5,7].inject {|sum, element| sum+element}                    #数组求和[1,3,5,7].inject {|product, element| product*element}        #数组求积a=Array.new  #新建一个数组a = [ 'ant', 'bee', 'cat', 'dog', 'elk' ]a[0] -> "ant"a[3] -> "dog"# this is the same:a = %w{ ant bee cat dog elk }a[0] -> "ant"a[3] -> "dog"a.length -> 5  #数组长度,变量为字符串长度

变量

全局变量 用$开头
实例变量 用@开头
类变量 用@@ 开头

person = "Tim"person.id -> 936870person.class -> Stringperson -> "Tim"

#{..} → 可以在引号中引用变量值或

def say_goodnight(name)result = "Good night, #{name.capitalize}" #.capitalize输出字符串首字母大写return resultendputs say_goodnight('uncle')输出结果:Good night, Uncle

String

squeeze

我们可以使用squeeze 方法来一处重复的字符s1 = "bookkeeper"puts s2 = s1.squeeze         # "bokeper"s3 = "Hello..."puts s4 = s3.squeeze         # "Helo."#If a parameter is specified, only those characters will be squeezed.puts s5 = s3.squeeze(".")    # "Hello."

将一个字符串按照单词进行反转,那么你就会用到split方法和,数组的reverse方法

phrase = "Now here's a sentence"puts phrase.split(" ").reverse.join(" ")# "sentence a here's Now"

strip

strip将会删除掉字符串的开头和结尾的空格sss="a d c "puts sss.strip  => abc如果你只想从字符串的开头或者结尾的空格,那么可以使用lstrip或者rstripstr = "  abc  "s2 = str.lstrip       # "abc  "s3 = str.rstrip       # "  abc"

chop

chop方法将会删除最后一个字符,返回新的string。如果字符是以\r\n结束,则两个字符都会被删除str = "abcxyz"s1 = str.chop           # "abcxy"str2="abc\r\n"s2=str2.chop  #abc

chomp

str = "abcxyz"puts s1 = str.chomp #abcxyzstr2 = "123\n"puts s2=str2.chomp   #123str1 = "abcxyz"str2 = "abcxyz"puts s1 = str1.chomp("yz")   # "abcx"puts s2 = str2.chomp("x")    # "abcxyz"   #只匹配结尾的词

unpack

puts  "E".unpack("c")    #69   输出一个字符串的asc码值

?

puts  "a"<<111    <<符号或者chr来把一个asc转换为字符串:puts  111.chr

scan

"hello world".scan(/./){|s| print s}  #扫描匹配的字符串并打印

casecmp

n4 = "ABC".casecmp("abc")   # 0 功能同<=>忽略大小写

puts

str="bobo"puts str.ljust(8,"++")    #左对齐其余用++补齐puts str.rjust(8,"++")    #右对齐其余用++补齐
"Seconds/day: #{24*60*60}" -> Seconds/day: 86400"#{'Ho! '*3}Merry Christmas!" -> Ho! Ho! Ho! Merry Christmas!"This is line #$." -> This is line 3         # #?显示程序块中语句所在的行号

each_byte

str="bobo"str.each_byte{|byte| puts byte.chr}结果:bobo

dup

person1 = "Tim"person2 = person1.dup   #同.new功能相同也可以用person2=person1person1[0] = "J"person1 -> "Jim"person2 -> "Tim"

freeze

person1 = "Tim"person2 = person1person1.freeze   # 字符串不可变person2[0] = "J"结果:prog.rb:4:in `[]=': can't modify frozen string (TypeError)from prog.rb:4

index & rindex

index方法返回指定的子字符串,正则表达式或者字符的起始位置(如果有多个匹配的只返回第一个匹配的起始位置)没有发现的话返回nil,而rindex则是从string的右边(也就是结束处)开始查找,不过返回的值却是从左边数起的:str = "Albert Einstein"puts pos1 = str.index(?E)        # 7puts pos1 = str.index(69)        # 7puts pos2 = str.index("bert")    # 2puts pos3 = str.index(/in/)      # 8puts pos4 = str.index(?e)        # nilputs pos5 = str.index("bart")    # nilputs pos6 = str.index(/wein/)    # nil

正侧表达式

sub或者gsub方法来进行替换,他们两个方法第一个参数都是接受正则表达式。其中,sub方法替换掉第一个匹配的地方,而gsub方法替换掉全部匹配的地方:s1 = "spam, spam, and eggs"s2 = s1.sub(/spam/,"bacon")               # "bacon, spam, and eggs"s3 = s2.sub(/(\w+), (\w+),/,'\2, \1,')    # "spam, bacon, and eggs"s4 = "Don't forget the spam."s5 = s4.sub(/spam/) { |m| m.reverse }     # "Don't forget the maps."  把匹配部分的单词反转s5 = "alfalfa abracadabra"s6 = s5.gsub(/a[bl]/,"xx")     # "xxfxxfa xxracadxxra"s5.gsub(/[lfdbr]/) { |m| m.upcase + "-" }# s5 is now "aL-F-aL-F-a aB-R-acaD-aB-R-a"

String类常用函数表

函数名称 说明 示例 * 将字符串拷贝N次 “ha”*4 ? “hahahaha” + 连接字符串 “yes”+“no” ? “yesno” ? 连接字符串 “yes”+“no” ? “yesno” concat 连接字符串 “yes”+“no” ? “yesno” ? 比较字符串,返回值: 大于=-1 “Ab” ? “ab” ? -1
等于=0 “ab” ? “ab” ? 0
小于=1 “ab” ? “Ab” ? 1 == 或 === 判断两个对象是否相等 “1” == “1” ? true , “1” == 1 ? flase =~ 匹配正则表达式 “abc123abc” =~ /\d/ ? 3 [ ] 或 slice 返回字符串的某一范围内的值 “abc”[0,2] ? “ab”, “hello”[/llo/] ? “llo”, “abc”.slice(0,2) ? “ab” []= 替换字符串的某一范围内的值 a=“hello word” → a[1,2]=“OO” → puts a ?“hOOlo word” capitalize,capitalize! 把字符串的首字母大写,其他字母小写 “hi,Ruby”.capitalize ? “Hi,ruby” chomp,chomp! 删除字符串后的空白字符 “string”r”n”.chomp ?“string” chop 删除最后一个字符 “string”.chop ? “strin” count 返回该字符串中含的字符个数 a = “hello world” → a.count “lo” ? 5 #(l出现 3次,o出现 2次)

基础

ruby打印输出命令puts 带换行符输出priint 不带换行符输出ruby中区间表示1..5表示1,2,3,4,51...5表示1,2,3,4
/home1/yepnnet/public_html/wiki/data/attic/ruby.1223652031.txt.gz · 最后更改: 2008/10/10 09:20 由 admin