zoukankan      html  css  js  c++  java
  • Ruby语言学习笔记

    在codecademy上开始玩ruby了

    1.数据类型:boolean,string,number
    变量直接用即可,不用声明(“拿来主义”)
    运算符:+ - * / ** % == != && ||!> >= < <= 等
    输入语句:gets/gets.chomp(后者不包括"/n")
    输出语句:puts/print(后者不包括"/n") 用#{变量}输出对应变量的值
     
    2.每个量都是object 都有method
    string的几个方法:length reverse upcase downcase(小写) capitalize(首字母大写其它都小写)
    !放在方法后表示在原有的string做更改生效
    include?方法返回布尔型结果 表示是否包含某个量
    split(somechar) 表示按照somechar分割
    .to_s方法表示转化为string形式
     
    3.单行注释 # 
    多行注释 
    =begin
    add sth here
    =end
     
    4.if判断句:条件处不用加括号
    建议空两格后写"then"操作
    最简单的if句    puts "sdf" if 2>3   (不用写end)
    多行最简单if句子  
    if 2>3
        puts "sdfds"
    end
    完整的if判断句
    if
    elsif
    else
    end
    用unless表示“如果不”, 例如if somevalue 等价于 unless !somevalue   unless于if用法格式相同
    ?:操作符相当于一个if else end语句
     
    5.循环
    while-end
    until-end
    for-end   其中for num in a..b 表示[a,b)  for num in a...b表示[a,b]
    loop-do-end 中间使用next语句类似于continue的效果
     
    6.数组
    遍历:  .each方法  array_name.each {|x| puts x}    
                .times方法
    输出:puts array_name 则输出所有元素
    数组的元素不一定要为同一种类型,可以混合
     
    Hash的使用
    my_hash=Hash.new
    my_hash=Hash.new(n)赋初值为n
    my_has={idxA=>valA, idxB=>valB}
    hash的输出  each方法: my_hash.each {|x| puts x}     my_hash.each {|k,v| puts my_hash[k] }
    sort_by{|k,v| v}按照v降序排序
    reverse方法将数组倒置
     
    7.函数定义
    def method_name(paralist)   #若没有参数,则括号可以省略  方法名字中可以有“=”
        #do sth
    end
    返回值类型:可以使用return语句  默认返回最后一个表达式的值 eg. def add(a,b) a+b
    block和method的区别:method是block的抽象
     
    8.排序
    .sort方法  后接代码块时作为比较参数  eg:
    books=["what", "me"]
    books.sort!{|x,y| x<=>y}   #升序
    books.sort!{|x,y| y<=>x}  #降序
    A<=>B是做比较,A>B时候返回1,==时返回0, <时返回-1
    关于nil:若hash中某个key不存在则访问它时返回nil    当然如果用my_hash=Hash.new(n)的方式则默认值为n 返回n
    Ruby中只有false和nil的值不是true   false表示“假”   表示“什么都没哟”
     
    9.Ruby符号(symbol)
    相同值得string,其object_id未必相同(类似于java中的对象的特点)
    但symbol的object_id一定唯一     object_id类似于指针
    symbol语法  冒号开头 eg.  :my_symbol
    symbol用于hash中,因为symbol是唯一的,且一旦创建就不可以改变,而且是快速的
    symbol于stringd的转化:  .to_s    .to_sym或.intern
    注:在ruby1.9的Hash中,使用冒号(colon)后置的方式,且不使用rocket(=>)的方式来初始化hash 这与js和python中类似
    eg.  new_hash={one:1 , two:2}
    但是这样一来,key值就不能是多个字符了,诶
    Hash的几个method   .each_key    .each_value     my_hash[idx].nil?方法返回是否存在idx
     
    10.||=操作符(conditional assignment)
    若变量为nil 则||=后为新值
    反之,原有值不变
    &&操作与||操作时短路操作
    .times  .each  .upto  .downto方法  都可以用来做循环操作
    eg.  "L".upto("P") {|x| puts x}  表示输出从L到P的所有字母
    .respond_to?方法返回“一个对象里是否有某个方法可以使用”的真值
    .push方法的简写:用 "<<"符号  eg.  [1,2,3] << 4
    (但是在拼接string的时候注意,如果有原本不是string的量要先用to_s转化;更简单的方式是用#{})
    .collect方法(等同于.map):在原有block基础上做更改  eg. my_nums=[1,2,3]  my_nums.collect!{|x| x**2}   则my_nums变为[1,4,9]
    yield关键字:临时”屈服“,即从当前行开始执行一段插入的代码,就像是”走神“了一样
    blocks不是对象(object)
    proc是保存了的block,可以复用  使用proc时,小括号中用&proc_name即可,  lambda也是一样的格式使用
    .call方法:proc的一个方法,直接调用proc中的代码
    lambda关键字:lambda {puts "Hi"} 等同于 Proc.new{puts "Hi"}    lambda检查传入的参数而proc不检查   在函数中调用lambda后会继续执行函数体,而proc则不会回去继续执行,而是return掉了    (相当于一个是continue一个是break?有点这个味道)
    .select方法  eg. nums=[1,2.3,  9]   ints=nums.select{|x| x.is_a?Integer}  则ints=[1,9]
     
    11.ruby类
    最简式 class NewClass
                end
    成员变量:用@+名字表示
    实例化一个对象:object_name=ClassName.new(paralist)
    变量作用域:  $ global variable(全局变量)    @instance variable(实例变量)    @@class variable(类变量,类似于静态变量)
    inheritance(继承):使用"<"符号  eg. class subclass < superclass
    子类可以覆盖父类中的方法(override)
    关键字super可以用来调用父类中的方法或者变量
    ruby是单继承的,一个类不能有多于1个的父类
    类的静态方法: eg.  class Machine
                                        def Machine.hello    #用类名.方法名
                                            puts "hi"
                                        end
                                    end
    private/public关键字:实现封装,写在方法定义的前面一行, 默认的方法权限为public  但若在pivate限定过的方法后面的方法,若不加以说明则为private
    attr_reader/attr_writer/attr_accessor (后者等于前两者相加)
    module(模块):和class很像 但不能实例化,不能有子类,可以用于存储。(类似于java中的interface)
    module中定义的方法,使用类名.方法名 或者 self.方法名   #???
    域操作符   eg. Math::PI
    加入库: 用require +库名  eg. require 'data'
    include关键字的效果是:你可以不再写::(作用域限定符)  eg.   include Math  #(不加引号)
    mixin(混入):module可以include进class中使用,是的类的实例可以使用module中的方法;而当使用extend替代include时候,表示在类的级别上使用module的成员,方法
    ruby中允许用1_000_000表示1000000
  • 相关阅读:
    Windows Server 2012 64bit RMAN异机不完全恢复(迁移)
    dbms_jobs vs. dbms_scheduler_jobs
    Migrating from dbms_job to dbms_scheduler
    ORA-12537: TNS:connection closed
    win7 ins 30131 oracle 12c
    Vector源码分析
    LinkedList源码分析
    ArrayList源码分析
    jsp 显示日期
    Spring data redis 使用 pipelined 批量操作
  • 原文地址:https://www.cnblogs.com/zjutzz/p/3148556.html
Copyright © 2011-2022 走看看