Ruby是一种跨平台,面向对象的解释型语言。他是本着简单实用的原则创建出来的,他的创始人Matz说,“我想用最省力的方式写程序,这是我设计ruby的初衷”
我用的ruby1.9.2版本应该是比较新的版本,IDE选择是netbeans。具体的配置过程可以上网查 有很多的。
在ruby中,不管是数字,字符串,还是对象,都看做是对象。并且每一个对象都内置了一系列方法。java的基本类型有它的包装类对象。在ruby中就不会有包装类的概念
因为一切都是对象。ruby应该说比java更面向对象
使用对象“.”然后跟方法名可以调用这个对象的方法以及ruby的核心方法内置在ruby的核心模块中,可以被任何对象调用(如:puts,gets)
puts 相当于java里面的System.out.println();
列:
ruby的注释有2个方法 多行注释用=begin和=end括起来 单行注释用#号
=begin my frist ruby code go on... =end puts 'hello,world'+2.to_s #result is hello,world2
‘’和“”可以定义一个字符串 ‘’效率更好 后面会讲 2是一个整型 它也是一个对象 所有可以调用ruby的核心方法 to_s表示把它转成字符串。这里不同与java ,java会自动把2转化成字符串再相加。ruby不会 否则会报错。
定义变量:
只有解释器看到有变量定义后,这个变量才会产生,也就是说不会预先给变量分配地址和控件
在ruby中 不需要维护对象的类型,如果是整数就是一个整型类型,是字符串就是,就是字符串,就是字符串类型等。这体现了ruby动态类型特征,非常灵活。
所以在变量前面不需要有类型
但是我认为如果运用不恰当,也会让其他人看你的代码很头痛。
a=10 #integer a='player' #string a=7.55 #float puts a #7.55
创建方法:用def定义方法,方法体要在def和end里面,参数列表需要括号里
def hello puts 'hello' end hello #hello #不带参数的方法 def hello() 'hello' end puts hello() #hello #带参数的方法调用 def hello2(name) 'hello world' name end puts hello2('sucess') #sucess
同一个类中第1,2个方法参数和方法名都一样 在java中是不允许的 ruby就可以 (相当于方法2把方法1重写了 之后的调用都会执行到方法2去 我的理解。)方法定义时可以给参数定义默认值。如果调用方法时没有传参数进来,那么方法会使用这些默认值
上面列子中有‘#{}’这样的代码,他的作用是计算{}中表达式的结果,并把结果转化为字符串。def check(arg='hello',arg1='world',arg2='player') "#{arg},#{arg1},#{arg2}" end puts check #hello,world,player puts check('ruby') #ruby,world,player
ruby中调用方法 不一定要传对应的参数和对应个数 这个我测试了下 只有在方法有默认参数和*arg的时候才可以 否则也必须传入对应的参数
ruby中在同一个类中不能实现方法重载 但可以用其他方式做到
def check(arg,arg1,arg2) "#{arg},#{arg1},#{arg2}" end def check(arg,arg1) 'moon' end def check(arg) 'sun' end puts check('ruby') #sun puts check('ruby','1') #wrong number of arguments(2 for 1) puts check('ruby','1','2') #wrong number of arguments(3 for 1)
只有第一行打印才能成功输出sun,后面的都报错 参数个数错误。 这里我认为可能跟ruby支持动态参数,可变参数有关。我理解为同一个类中ruby不能重载,相当于重写了方法的动态参数:
‘*’会接受传过来的所有参数 并把他们放在arg1中def check(*arg1) arg1.each do |strings| puts strings end end check check('1','2')
each表示数组的每一个 相当于for循环 do end是程序块
arg1里面的每一个元素都会执行do end里面的代码
方法别名:
在ruby中可以给方法指定一个别名,对应的是原方法的一个拷贝 如果原方法改变了 别名不会跟着变化
def oldmtd 'oldmtd' end alias newmtd oldmtd def oldmtd 'improver' end puts oldmtd #improver puts newmtd #oldmtd
数组:
可以使用[]定义数据 数组可以包含不同的对象类型 可以用负索引表示最后一个元素开始
数组里面也可以有数组类型array=[1,'string',1.2] puts array[0] #1 puts array[1] #string puts array[-1] #1.2
array=[1,'string',1.2,[1,2,'ice',1.2]] puts array[-1] #1 2 ice 1.2 puts array[-1].class #Array 对象类型
范围:
范围这个概念用在一系列元素(序列)情况下。这个序列有一个起点 一个终点,中间是连续的有规律的元素
在ruby中可以使用..和...生成这样的对象 ..包含终点 ...不包含终点
digits=-1..9 puts digits.include?(5) #true 是否包含5 puts digits.include?(5.2) #true 是否包含5.2 puts digits.min #-1 最小值 puts digits.max #9 最大值 #范围对象使用最多的就是判断某个值是否在这个范围内 可以是用===符号 puts digits===5 #true puts digits===15 #false puts digits===3.1415926 #true puts ('a'..'y')==='g' #true puts ('a'..'y')==='z' #false