`

ruby基础

阅读更多
引用
if __FILE__ == $0
  # TODO Generated stub
  class Person
    def initialize(name,age=18) #initialize是初始化方法,相当于java的构造器
      @name=name
      @age=age
      @motherland="China"
      
    end #初始化方法结束
    def talk
      puts "my name is "+@name+",age is "+@age.to_s #@age.to_s的含义是:将数@age转换为字符串
      if @motherland =="China"
        puts "I am a chinese."
      else 
        puts "I am a foreigner."
      end
    end #talk方法结束
    
    # attr_reader: 实例变量只读
    
    # attr_writer: 实例变量可写
    
    # attr_accessor: 变量可读可写
    
    attr_writer:motherland
    #attr_writer:motherland相当于def motherland=(value) return @motherland=value end
    #attr_reader:motherland相当于def motherland return @motherland end
    # attr_accessor:motherland
  end #person类结束
  
  #在Ruby中模块定义:module
  # 类定义:class
  # 方法定义:def undef
  # 检查类型:defined?
  p1=Person.new("hefeng",24)
  p1.talk
  p2=Person.new("Ben")
  p2.motherland="ABC"
  p2.talk
  
  class Student <Person #用"<"表示Student类是Person类的子类
    def talk
      puts "I am a student.my name is "+@name+",age is "+@age.to_s
    end #talk 方法结束
  end
  p3=Student.new("ChZh", 27);
  p3.talk
  p4=Student.new("Tom");
  p4.talk
  #常量全用大写的字母,用下划线分割单词.例如:MAX,ARRAY_LENGTH.
  #类名和模块名用大写字母开头的单词组合而成.Eg:MyClass.Person
  #变量和参数用小写字母开头的单词组合而成.Eg:name currentValue
  #方法名全用小写的字母,用下划线分割单词.Eg:talk,is_prime?.在Ruby里,有时将"!"和"?"附于某些方法名的后面.
  #惊叹号"!"暗示这个方法具有破坏性,有可能会改变传入的参数.
  #"?"表示这个方法是一个布尔方法,只会返回true或false
  
  
  
end
#可变参数方法
def sum(*num)
  numSum = 0
  num.each{|i|numSum+=i}
  return numSum
end
puts sum()
puts sum(3,6)
puts sum(1,2,3,4,5,6,7,8,9)

#Ruby中要使用域作用符::
# 全局变量用$开头
# 实例变量,变量名用@开头
# 变量名用@@开头  

class StudentClass
  #变量
  @@count=0
  def initialize(name)
    @name = name
    @@count+=1
  end
  def talk
    puts"I am #@name,This class have #@@count students."
  end
end
p1 = StudentClass.new("Student 1")
p2 = StudentClass.new("Student 2")
p3 = StudentClass.new("Student 3")
p4 = StudentClass.new("Student 4")
p1.talk

class StudentClass
  #变量
  @@count=0
  #类方法
  def initialize
    @@count+=1
  end
  def StudentClass.student_count
    puts"This class have #@@count students."
  end
end
p1 = StudentClass.new 
p2 = StudentClass.new 
p3 = StudentClass.new 
p4 = StudentClass.new 
StudentClass.student_count

#单例方法也叫单件方法.定义单例方法,首先要生成一个实例对象,其次要在方法名前加上对象名和一个点号"."
class Ps
  def talk
    puts "Hi!"
  end
end
p1 = Ps.new
B2 = Ps.new

def B2.talk
  puts "Here is SB"
end

p1.talk
B2.talk
#模块:在程序中,相关的,不相关的代码的组合,叫作模块 模块名.方法名(参数)
arr=[3,4,5,6,7,8,9]
puts arr[0]
puts arr.first
puts arr[arr.length-1]
puts arr[arr.size-1]
puts arr[-2]
#Ruby的数组大小是动态,
#数组的索引从0开始,一直到数组的长度减1;负数表示从数组末尾开始的索引;用一对数字索引数组,
#第一个数字表示开始位置,第二个数字表示从开始位置起的元素数目
arr=[4,5,6]
#打印数组集合
print arr.join(","),"\n"
#把4号索引位置元素赋值为"m"
arr[4]="m"
print arr.join(","),"\n"
#打印3号索引
print arr[3],"\n" #3号索引为空!!!
arr.delete_at(3) #删除3号索引位置元素
print arr.join(","),"\n"
arr[2]=["a","b","c"] #把2号索引位置元素赋值为["a","b","c"]
arr[0..1]=[7,"h","b"] #把0..1号元素替换为7,"h","b"
arr.push("b") #加入元素"b"
arr.delete(["a","b","c"])#删除元素["a","b","c"]
arr.delete("b")#删除所有元素"b"
arr.insert(3,"d")#在3号索引位置插入元素"d"
arr<<"f"<<2 #加入元素"f";加入元素2
arr.pop #删除尾元素
arr.shift #删除首元素
arr.clear #清空数组arr

if __FILE__ == $0
  # TODO Generated stub
  #数组运算
  aaaa=["aa",4,5,"bb"]
  bbbb=[4,1,3,2,5]
  print aaaa*2,   "\n"
  print bbbb-aaaa ,"\n"
  print aaaa | bbbb ,"\n"#并运算 aa 45 bb 132
  print aaaa & bbbb ,"\n"#交运算45
  print bbbb.sort ,"\n"#排序
  print aaaa.reverse ,"\n"#倒置
  #%q用来生成单引号字符串;%Q用来生成双引号字符串.%q或者%Q后面跟着的是分隔符.
  str ="Hello,kaichuan, Welcome!"
  puts str=~/a/
  #匹配一个正则表达式用"=~"
   #匹配一个正则表达式用"!~"
   #块可以接收yield传来的参数
   def do_something
     yield #块
 end
 do_something do
   (1..9).each{|i| print i if i<5}
   puts
 end
 do_something do
   3.times{print "Hi"}
puts
 end
end

#数组迭代器
class Array
def one_by_one
  for i in 0...size
    yield(self[i])
  end
  puts
    end
  end
arr=[1,3,5,7]
arr.one_by_one{|k| print k, " ,"}
arr.one_by_one{|h| print h*h, " ,"}
if __FILE__ == $0
  # TODO Generated stub
  #求50内的素数
  for i in 2..50
f=true
for p in 2...i
  if i%p==0 #如果能整除
    f=!f #那么这个数不是素数
    break
  end
end
print i," " if f #如果这个数保持起始假定,则打印
end
print "\n"
# times upto downto each step
 3.times{print "Hi!"}
 1.upto(9){|i|print i if i<7}
 9.downto(1){|i| print i if i<7}
 (1..9).each{|i|print i if i<7}
 0.step(11,3){|i|print 1}
 
 #在 ruby 中用begin/end rescue ensure raise 来处理异常,在ruby可以用在rescue中,
 #可以只用rescue或是ensure,两者都使用时,rescue必须在ensure前
end










分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics