ruby学习笔记(一)安装和基本语法

关于ruby

为什么学习ruby

    和Python一样,Ruby也是一个相当开发者友好的语言,遵循着最小惊讶原则设计的ruby语言甚至在一定程度上比起Python更加容易学习和使用。ruby on rails在web运用相当广泛,在学习成本不高的前提下学习ruby还是相当合算的。

学习资源

    ruby.org
    菜鸟教程

安装和使用

安装

    Linux下直接apt-get install ruby就好,Windows下有安装包。嗯不多说了…

命令行

    bash下输入irb即可进入ruby的交互式命令行工具,用来学习语法命令行很棒。退出irb命令行输入exitquitCTRL+D。也可以输入ruby进入命令行,输入CTRL+D运行,但是体验大概不太好。

运行脚本

    ruby源文件后缀为rb编写一个test.rb然后在bash中输入ruby test.rb即可运行。

基础

第一个ruby程序

    新建一个helloworld.rb在里面输入puts "hello world",保存并运行。

1
2
$ ruby helloworld.rb
hello world

    嗯,和ruby的幸福生活开始了呢。

基本语法

输入输出

标准输入输出

    输入使用gets,标准的输出使用putsprint,两者用法相似,不同之处在于puts在输出完成以后会进行一次换行,相当于Java的println(),但是当输出字符串结尾是换行时两者功能一致,单个字符的输出也可以使用putc。注意:没有getc

    example:

1
2
3
4
5
6
7
val=gets        #在控制台输入hello
puts val #输出hello(换行)
puts "hello" #输出hello(换行)
print val #输出hello(换行)
print "hello" #输出hello(不换行)
putc val #输出为h
putc "hello" #输出为h
here document

    ruby中有一种here document用于输出多行字符串。here document通过<<运算符指定结束标记,输出结束标记前的所有文本。结束标记可以用双引号框起来也可以不狂

    example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
print <<EOF
this is a string;
EOF
print <<"10",<<"20"
123456789
10
11 12 13 14 15 16 17 18 19
20
puts <<hello,<<"good bye"

that's where we met

hello

that's where we were together

good bye
文件输入输出
  1. 文件打开:File.open()和File.new(),两者的不同在于open()可以与块关联,关于块的内容留在后面介绍。
  2. 文件关闭: File.close()
  3. 读文件:sysread()
  4. 写文件: syswrite()

    看例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# file new
afile = File.new("../../res/input.txt","r+")
if afile
# read data
content = afile.sysread(20)
puts content
# write data
content = gets
afile.rewind
afile.syswrite(content)
else
puts "open failure"
end
# file close
afile.close
# file.open()
File.open("../../res/input.txt","r") do |aFile|
content = aFile.sysread(20)
puts content
end

    上面代码中的|aFile|用于定义局部变量。File.new()和File.open()的第二个参数为打开模式,有一下选项:

  1. r: 只读模式
  2. w: 只写模式(覆盖)
  3. a: 只写模式(追加)
  4. r+/w+/a+: 读写模式,区别是r+和w+的文件指针初始位于文件头,a+的文件指正初始位于文件尾;r+在找不到文件时会报错,w+和a+在找不到时会创建新文件。

源码链接:    源码

    嗯…不小心入了坑,只是记录一下,应该不会花太多时间去学ruby了233