Ruby on Rails入门笔记(1)ruby基本语法概念

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不能重载,相当于重写了

方法的动态参数:

def check(*arg1)
  arg1.each do |strings|
      puts strings
  end
end
check
check('1','2')
‘*’会接受传过来的所有参数 并把他们放在arg1中

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
 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值