Ruby 语言基础

来源:互联网 发布:淘宝考研资料靠谱店铺 编辑:程序博客网 时间:2024/06/07 10:08
Ruby学习笔记1__入门
1.Ruby的安装
    1.1    Window 直接去网站http://rubyinstaller.org/ 下载对应的版本
              Centos  通过yum install ruby 安装ruby包
               ubuntu sudo apt-get install ruby 安装对应的ruby包
    1.2    简单的Demo
            vim 一个类似于vi的文本编辑器
                    如果没有可用通过 sudo agt-get install vim 安装
                    1.2.1 方法一
                        vim一个ruby文件,ruby文件默认以.rb结尾
                        在文件里面输出以下代码:
                   print "hello Ruby" 、
                        相当于输出一个"hello Ruby"  ESC : x  保存退出
                        :wq 是强制写入并保存,文件没有被修改也强制写入保存退出,更新文件修改时间
                          :x  是只有有修改的时候才进行写入并保存退出
                   print 和 puts区别:print后面没有换行符。puts 有换行符
                            print "hello\n"  相当于  puts "hello"
                   执行ruby文件
                            直接 ruby helle.rb
                    1.2.2 方法二
                            直接输入 ruby 
                            然后输入ruby代码 ,默认是不执行,需要CTRL+D告诉解析器ruby代码已经输入完毕并执行
                    1.2.3 方法三
                            irm 交互式ruby代码然后回车执行
                                    返回nil表示未发现错误
                 代码:
                        "abd".length  字符串对应的方法。可以不加()
                                    长度.length   反转.reverse  大写.upcase  split 拆分。默认囧哥拆分  
                        -10.abs  求数字的绝对值
                                 具体可以看API   完全面向对象,方法可以叠加调用

                        "abc".reverse.upcase   -->CBA



Ruby学习笔记2__变量

变量:
    1.本地变量 : Local Variable
        name ="wangyu" 赋值name变量为wangyu字符串
                         作用范围受代码块的影响
    2. 实例变量: Instance Variable
        @age = 25 面向对象开发中经常用
                            保存对象的时候具体化实例
    3.全局变量 :    Global Variable
        $app_path = "/opt/user/"全局访问的变量
    4.常量 :Constant 大写
        VERSION ="v1.0"
数据类型:
    String 保存字符串
                由于ruby是弱类型,不需要声明数据类型
                如:string_name ="wangyu"
    Number 数字类型
                number_age = 1
                注意不能加"",不然会认为是字符串类型
    Array 数组类型
            array_score = [78,98,68]
    Boolean 布尔类型
                实际Ruby中是没有Boolean类型的,就是为了提高性能
    Hashes 散列类型 注意和数组的区分 hash可以通过key获取值
                hash_user = [:name=>"wangyu",:age=>25]
    Symbols 符号类型 保存不太变化的字符串:如hash里面的key
                :name 
字符串:ruby对应字符串的处理
            1.首先寻找字面量为“\n”并用二进制去替换他们,替换为回车。输入的时候就会输出一个换行
            2.字符串内的表达书内插。#{表达式} 会被替换为传进来的值。
            def goodnight name
                str ="good night\n #{name}"
                return str
            end
            puts goodnight "wangyu"
            #print good night
                        wangyu
                如果表达式是一个全局变量或是类变量(实例变量)则不需要花括号
            $greeting = "Hello" 全局变量
            @name ="Product"    实例变量
            puts "#$greeting,#@name"  注意加”“号
        ruby中的方法中的返回值,如果没有写return,默认返回最后一个被求值的表达式的值
        def goodnight name
            "good night "+name
        end
        puts goodnight "wangyu"
        #good night wangyu
区分一下类变量和实例变量
        @name实例变量  实例变量属于特定的某一个实例
          @name, @gender,@age都是实例变量。
        可以在类或子类的方法中引用实例变量。若引用尚未被初始化的实例变量的话,其值为nil。
            class Person
def initialize(name, gender, age)
@name = name
@gender = gender
@age = age
end
end
      
  @@name 类变量  被一个类所有的对象所共享,和全局变量和实例变量不同,类变量必须赋初值
    类变量是私有的,在类外部无法直接访问,只有通过实例方法和类方法去访问它
class Person
@@number = 0 #使用前必须有初值
def initialize(name, gender, age)
@name = name
@gender = gender
@age = age
@@number += 1
end
end
数组和散列表 Arrays and Hashes
   Ruby的数据和散列是被索引的搜集。两者都是对象的集合。通过键去访问。数组的键是整数,散列表的键可以是Object
数组字面量,在[]里面放一组元素
a =["a",1,3.14]  访问第一个元素  a[0]
设置第三个元素
3[2]=nil
a = ["wangyu",1,3.14]
a[2]=nil
puts a
wangyu
1

nil在ruby中也是一个对象,只是表示没有任何东西。
  
        
创建一个单词的数组可以如下:
name = ["peter","tom","joker","miss"]
但是对于多次输入""是比较麻烦的事情,ruby提供了简单的方法类初始化
a = %w{peter tom joker miss} 使用%w加花括号,不是方括号。并且项于项之间用空格隔开。这个字面量必须为每一项提供两个对象
一个键key一个value值
散列表定义方式:
student = {    
"tom" => 98,
"peter" =>76,
"joker" =>60
}
puts student["tom"]
98
#最后一个key后面不加,键key和值value之间用 => 链接,取值直接 student[key]

控制结构
if 后面需要加end结束判断,def方法后面需要加end结束,Class类后面需要加end结束
同理while需要用end来结束
大多数ruby语句会有返回值,这就意味着他们可以当条件使用
while 可以和and合用
while age>20 and width>30
puts "OK"
如果if或者while的语句体是一个表达式。Ruby的语句修饰符是有一种快捷方式的,只要写出表达式,
后面加if或while和条件也可以实现相应的逻辑
如:
puts "ok" if age>20 && width>30
下面代码一样
puts "ok" if age>20 and width>30

正则表达式
ruby中在//之间创建正则表达式,ruby中正则表达式也是对象,也可当做对象来操作
/helloworld|helloruby/ 他会匹配包含helloworld或helloruby的字符串
也可以改为另一种匹配方法
/hello(world|ruby)/ 匹配模式和上面一样
/ab+c/匹配开头为a中间为一个或多个b结尾为c的字符串
/ab*c/匹配开头为a中间为0或多个b结尾为c的字符串
\s 匹配空白字符,制表符,回车换行等
\d 匹配任意数字
\w匹配出现一个词的任意字符
一个点(.)匹配几乎任意字符
=~匹配操作符,用于和正则表达式匹配,如果匹配,返回匹配开始的位置,否则返回nil
所以可以在if或while中把正则表达式当条件使用。
puts "abc123"=~/\d+/      
3

def test str
str1 = /hello(world|ruby)/
return str=~str1
end
puts test "dsahelloworld"
3
正则表达式匹配的部分,可以通过Ruby的一个替换方法进行替换
sub 替换第一个匹配的
def replace str
str1 = str.sub /\d/,"*"
return puts str1
end
replace "helloworld123456"
helloworld*23456
gsub 替换所有匹配的
def replace str
str1 = str.gsub /a/,"M"
end
puts replace "banana"
bMnMnM

Block和迭代器
Block一个可以和方法调用关联的代码块
Block可以实现回调,以及实现迭代器
Block只是在花括号获得do...end之间的一组代码
一般单行block用花括号,多行用do...end
一但创建的block,就可以和方法的调用相关联。
如greet {puts "hi"}
如果方法有参数,参数放在block的前面
如greet "tom" {puts "hi"}
def sayhi
puts "hello eneryone"
yield
yield
puts "byebye"
end
sayhi {puts "I'm wangyu"}
hello eneryone
I'm wangyu
I'm wangyu
byebye
可以在定义的方法里面执行yield,ruby中yield语句可以理解为比如方法调用。
每次调用yield方法,代码都会被执行,可以提供参数给yield方法调用
在block中用在 || 之间给出参数名来接受yield的调用
def test
yield "dog",3
end
test {|name,age| puts "the #{name} is #{age} years old"}
the dog is 3 years old

('a'...'e').each {|char| print char}
abcd
3.upto(6) {|i| print i}
3456
5.times {puts "*"}
*
*
*
*
*
["cat","dog","tiger"].each {|name| print name +" "}
cat dog tiger 

读写文件
输出 puts、print
还有一个printf  格式化字符串的输出
printf "number:%5.2f\n name:%s\n",1.23,"wangyu"
number: 1.23
name:wangyu
#%5.2f 替换一个浮点数,最多5个,小数点后面2个,
#%s替换一个字符串
输入,gets函数,他从程序的标准输入流中读取下一行。


Ruby学习笔记3__类、对象、变量
类。
    每个类中的initialize方法相当于一个构造器。
    每一次new对象的时候,通过构造器就可以给这个对象的属性赋值
class Song
def initialize name,time
@name = name
@time = time
end
def play          
puts "this song is #@name play time is #@time minutes"
end
end
song = Song.new "goodnight",3
song.play
#this song is goodnight play time is 3 minutes

类的继承  通过  <   来实现继承
class KalaokSong < Song
    def initialize name,time,irc
        super name,time
        @irc = irc
    end
end
#super表示用父类的方式赋值





0 0
原创粉丝点击