r =~/-/ then p2 = Jisuan.new p2.subtraction elsif str =~/\*/ then p3 = Jisuan.new p3.multiply else str =~/\\/ p4 = Jisuan.new p4.divide end else p "Error" end print "input:" STDOUT.flush a =gets if a =~/^\w\d/ then #匹配字母跟数字 print "user" elsif a =~/\w\d\*\#\&;/ then #匹配字母数字和*号 print "pass
word" else print "error end
Ruby 语法快揽 Kernel 模块: 模块:
内部函数:严格说来,Ruby 中没有函数.但 Kernel 模块中定义的方法可以在任何地方调用 详见 kuqin/rubycndocument/man/stdlib_function.html
分行: 分行:
; (例句:puts 2/3;puts dja;putsjlkj) \(puts ‘I love’\
‘you’)
类:
定义过的类,再定义,意为追加,之前的类里有一个方法了,下次可以追加该类 再定义一个方法,两个方法都可以用。
类方法: 类方法:
只属于一个类的方法 class Test #定义类方法方式 1 def Test.meth1 # ... end #定义类方法方式 2 def self.meth2 # ... end #定义类方法方式 3 class << Test def meth3 # ... end End #定义类方法方式 4 class << self def meth4 # ... end end end
Define?: :
Defined?用来判断表达式是否定义。若表达式尚未定义,则返回 nil,若已经定 义,则返回一个字符串描述该表达式的种类。 defined? Val #=> nil defined? true #=> “true”
进制: 进制:
和 C/C++相同,Ruby 规定以 0 开头的数为八进制数,以 0x 开头的数为十六进制 数,以 0b 开头的数为二进制数。
变长参数: 变长参数:
方法的参数数目可以不确定,给参数加上星号,不定数目的参数被作为一个数组 def varadd(*num) sum = 0 num.each { |i| sum+=i } puts sum end varadd() varadd(1,2,3) varadd(1,2,3,4,5,6)
循环: 循环:
例: a =1 while a<10 print a," " a = a+1 end # 打印的是 a,先打印了 1,然后进行运算,再循环打印 print "-----" a=1 while a<10 print a," ",a = a+1 end print "-----" Loop 循环始终执行其后的方法块,直到 break x=0 loop do x = x+1 if x<=5 then print x
else break end end 执行结果为:1 2 3 4 5 。 a=1 until a >=10 print a," " a=a+1 end #until,知道满足条件跳出循环,while 在条件内循? print "-----" i=1 for i in 1..10 print i, " " end print "-----" 迭代的循环 4.times do puts "Hello!" #循环四次 end upto 和 downto 0.upto(9) do |i| print i, " " end 执行结果为 0 1 2 3 4 5 6 7 8 9。 0.step(10, 2) do |i| print i
, " " end 执行结果为:0 2 4 6 8 10 。 [1, 2, 3, 4, 5].each { |i| print i, " "} 执行结果为:1 2 3 4 5 。 ["apple", "orange", "banana", "watermelon"].grep(/an/) do | fruit| puts fruit end 执行结果为: orange banana
跳出循环: 跳出循环:
break:跳出当层循环 next:忽略本次循环的剩余部分,开始下一次循环 redo:重新开始循环,还是从这一次开始 retry:重新开始这个循环体 例子: c ='a' for i in 1..4 if i ==2 and c =='a' c ='b' print "\n2" break end print i,c," " end puts "\n\n3" #最后 break 出来后打印 puts"\n\n3" #break 跳出循环 print "-------\n" c ='a' for i in 1..4 if i ==2 and c =='a' c ='b' print "\n2" next end print i,c," " end puts "\n\n3" #next:忽略本次循环的剩余部分,print i,c " ".开始下一次循环 print "-------\n"
c ='a' for i in 1..4 if i ==2 and c =='a' c ='b'
print "\n2" redo end print i,c," " end puts "\n\n3" #redo:重新开始本次循环,到第 2 次那里再做一次 i=2 的,依次后的循环
alias 别名 别名:
例: Def foo Puts”fdfklsa” End Alias:abc:foo(前一个冒号后是别名,后面是方法名,调用的时候可直接用别名调 用) Abc
Return
例 def tre return 2*2 end puts tre
变量: 变量:
@@的为类变量,类变量在使用前必须初始化,属于类内私有。三点注意:必须 初始化;访问的话得通过方法;……………… @开始的变量时实例变量,属于特定的对象, 三点注意:类的内部可以读取和赋 值;类外不能直接访问,通过方法;使用