Ruby学习笔记之基础

Ruby基础


字符编码

Ruby中字符串中的编码依赖于其文件的字符编码,可以在文件开头设定文件编码如下:

[Ruby]

#encoding: utf8

# -*- coding: utf-8 -*- # Specify Unicode UTF-8 characters

[/Ruby]

标准输入输出

puts和putc 用来输出

printf用来格式化输出

gets用来读取,但是还要转换成其他的类型的数据

as:number = Integer(gets)

p是puts的简写,但是可以打印出更加有好的信息

Ruby命名规则


Ruby中的命名规则和C语言相同,面向对象的命名则是驼峰法。

全局变量

Ruby中有全局变量,这个和其他语言不同。又因为Ruby是一个纯的面向对象的语言,因此全局变量显然不符合面向对象的风格。但是Ruby的全局变量比其他语言更加随便,因为他不需要在顶层空间中定义,在任何空间中只需要在变量名前面加上$就可以声明一个全局变量,但是在Ruby中完全不建议使用全局变量。

def a_scope

$var = "some value"

end

def another_scope

$var

end

Ruby中通用布尔规则

在ruby中除了nil和false以外,其他的值都是true

命令行参数

ARGV存放了所有的命令行参数

动态语言的作用域规则

for,while,unitle等流程控制结构中,其中声明的变量在流程结构后面还存在,这个跟静态语言的大不相同,但是注意块中变量都是局部的。

并行赋值

@name, @block = name, block

a, b = 1, 2, 3, 4 # a=1, b=2

c, = 1, 2, 3, 4 # c=1

比较操作符


eql?

两个对象的值和类型都必须相等,因此1 == 1.0为true,而1.equ?(1.0)为false

equal?

这是传统的用来比较两个引用的对象是否是同一个,而==则用来比较两个对象是否相等

===

=~

流程控制


for


Ruby中的for语句和Python中的很像。

for i in ['fee', 'fi', 'fo', 'fum']

print i, " "

end

for i in 1..3

print i, " "

end

for i in File.open("ordinal").find_all {|line| line =~ /d$/}

print i.chomp, " "

end

类支持for

只要类实现了each方法就可以支持for语句,yield的参数回传递给for中的迭代变量

class Periods

def each

yield "Classical"

yield "Jazz"

yield "Rock"

end

end

periods = Periods.new

for genre in periods

print genre, " "

end

=》sical Jazz Rock

建议

Ruby中的for语句都是调用对象中的each方法,因此建议不使用for而直接使用额啊传方法来代替。

while


while weight < 100 and num_pallets <= 30

pallet = next_pallet()

weight += pallet.weight

num_pallets += 1

end

until

until和while相反,在开始的时候表达式是true,那么就跳出循环

case


case

when song.name == "Misty"

puts "Not again!"

when song.duration > 120

puts "Too long!"

when Time.now.hour > 21

puts "It's too late"

else

song.play

end

这儿没有匹配,case相当于一个多重if语句

kind = case year

when 1850..1889 then "Blues"

when 1890..1909 then "Ragtime"

when 1910..1929 then "New Orleans Jazz"

when 1930..1939 then "Swing"

when 1940..1950 then "Bebop"

else "Jazz"

end

注意如果不换行,那么必须使用then

类型匹配

case shape

when Square, Rectangle

# ...

when Circle

# ...

when Triangle

# ...

else

# ...

end

if


if count > 10

puts "Try again"

elsif tries == 3

puts "You lose"

else

puts "Enter a number"

end

注意if语句中,最后一个表达式的值是最后的if的结果,因此上面的语句还可以表达成

if count>10

"Try again"

elseif tries == 3

"you lose"

else

"Enter a number"

可以把if语句写到一行上,那么必须在if后面加上then

minimum = if x < y then x else y end

unless

unless==if not

statement modifier

简单来说,就是单行的条件判断

square = square*square while square < 1000

puts "Danger, Will Robinson" if radiation > 3000

打断


1.打断操作符可以用在循环和迭代的块语句中

2.如果和statement modifier合用,那么可以跟简单地表示

break

redo

redo表示把当前的循环再次执行,但是不在计算循环变量,就好像仅仅执行一次一样。

next

then

then在控制结构中是可选的,但是如果判断条件和控制快在一行时必须加上then

三目表达式

cost = duration > 180 ? 0.35 : 0.25

引用测试

o == nil # Is o nil?

o.nil? # Another way to test

Ruby的变量加入规则

在Ruby中,只要在程序中出现了变量的初始赋值,那么这个变量就已经存在于程序中,不论这个赋值是否执行。(这个和传统的想法不同:程序只有在执行赋值时才把变量加入)。

例如下面的赋值:

n = 100 if false

这儿的赋值并没有执行,但是程序空间中已经有这样的一个变量n,这是由于没有赋值,他的值为nil。

注意:

1.对于常量,这个规则有一点不同,因为常量必须有一个初始值,如果向上面的这样,那么常量是一个未初始化状态,引用它会出错

表达式的值

在Ruby中每一个表达式都有一个值,除了While和until没有。

甚至表达式还可以一边返回值,一边抛出异常

if n < 1

raise "argument must be > 0"

elsif n == 1

1

else

n * factorial(n-1)

end

当然,也可以赋值

a = if true then 10 else 20 end



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值