zoukankan      html  css  js  c++  java
  • ruby 学习精简笔记

    ============================================================================
    1、控制器中的方法可以相互调用吗
    2、控制方法中定义的@变量是不是实例变量,它貌似只能在控制器方法对应的view中应用,不能被其他view使用
    3、text_field等的传值方式,表单的传值方式
    4、activeRecord的关系映射
    ============================================================================
    ruby中的代码每个语句放在单独的行数,不需要在每个句子的末尾加上分号
    ruby的变量不需要预先声明,可以在使用的时候直接赋值,根据赋值的类型确定变量类型
    ruby字符串中含有表达式或者变量用#{表达式},如果是全局变量或实例变量则可以不用花括号

    $greeting="helllo"
    @name="prudence"
    puts "#$greeting,#@name"
    方法以def...end的形式表示
    ruby方法所返回的值,是最后一个被求值的表达式的值,可以省略return.
    ruby使用一种命名惯例来区分名称的用途:名称的第一个字符显示这个名称如何使用,
    局部变量、方法参数和方法名称都必须使用小写或者下划线,全局变量都用美元符号($)为前缀;
    而实力变量以at(@)符号开始,类变量则以两个@符号开始。最后,类名称、模块名称和常量都必须一个大写的字母开始。
    名称可以是字母、数字、下划线的任意组合,但是在@符号之后的不能是数字。按惯例,包含多个单词的实例变量名称在词与词
    之间用下划线,包含多个单词的类变量名称用混合大小写。方法名称可以以?、!、=字符结束。
    数组:a=[1,2,3] a[0]=1,
          a=%wi am ok a[0]="i" a[1]="am" a[2]="ok"        
    散列表:a={"1"=>1,"2"=>2,"3"=>3} a["1"]

    控制语句:如果只是简单的if或者while控制语句,例如只有一句,则可以先写出表达,然后再写if或者while
    如:puts "ok" if 3>2

    ruby 的一个特性:block和迭代器
    block是一个代码块可以和方法相关联,几乎和参数一样
    block只是在花括号和do...end之间的一组代码。
    {puts "hello"} #this is a block
    或者
    do
       puts "hello"
    end
    惯例多行用do...end,单行用{},一旦创建了block,就可以和方法相关联。吧block得到开始放在含有方法调用的源码的结尾处,就可以实现
    和方法的关联。比如下面的代码:
    greet{puts 'hi'}
    如果方法有参数:
    greet("jim"){puts 'hi'}
    使用ruby的yield语句,方法可以一次或者多次地调用相关联的block,可以把block想象或者比作方法调用,它调用yield语句的方法所关联的block.

    def call_block
    puts "starts of method"
    yield
    yield
    puts "end of method"
    end

    call_block {puts "in the block"}
    结果:
    starts of method
    in the block
    in the block
    end of method

    看到了吧,block中的代码随着yield的出现而得到调用。当然,我们还可以给yield提供参数,参数会传递到block中。在block中,竖线|之间给出参数名来接受这些来自yield的参数.
    def call_block
      yield("hello",99)
    end
    call_block{|str,num| ...}

    ruby库中使用大量的block来实现迭代器,迭代器是从某种(collection)如数组中返回元素的方法
    animals=%w(ant bee cat dog elk)
    animals.each {|e| puts e}
    看了上面block和yield的使用不难推理出each实际上是这样的一个方法:
    def each
       for each element #伪代码
       yield(element)
       end
    end

    5.times{puts "*"}
    1.upto(6){|i| puts i.to_s}


    定义方法:
    def ...end
    ruby可以让你指定方法参数的默认值-如果调用者在传入参数时没有明确的

    ruby可以让你指定方法的参数的默认值---如果调用者在传入参数时候没有明确指定所用的值,为此你可以使用复制操作符:
    def cool_dude(arg1="Miles",arg2="Coltrane",arg3="Roach")
      "#{ag1},#{ag2},#{ag3}."
    end
    cool_dude
    cool_dude("Bart")->Miles,Coltrane,Roach
    cool_dude("Bart","Elwood")->Bart,Coltrane,Roach
    cool_dude("Bart","Elwood","Linus")->Bart,Elwood,Linus
    可变长度的参数列表
    def varags(arg1,*rest)
      "Got #{arg1} and #{rest.join(',')}"
    end
    varags("one")->got one and two
    varags("one","two","three")->got one and two,three

    如果方法的最后一个参数是&,那么所关联的block会转换成一个Proc对象,然后赋值给这个参数。

    class TaxCalculator
     def initialize(name,&block)
       @name,@block=name,block
     end
     def get_tax(amount)
      "#@name on #{amount}=#{@block.call(amount)}"
     end
    end

    tc=TaxCalculator.new("Sales tax"){|amt| amt*0.75}
    tc.get_tax(100)   #->Sales tax on 100=7.5
    tc.get_tax(250)   #->Sales tax on 250=18.75

    方法可以返回多个值,返回多个值则是以数组的形式组织的
    def meth_three
     100.times do |num|
      square=num*num
      return num,square if square>1000
      end
    end
    meth_three ->[32,1024]
    num,square=meth_three ->num=32,square=1024

  • 相关阅读:
    制造业接入物联网的4大优势
    一篇文章读懂什么是串口通信及其工作原理
    4G工业路由器在仓储物流中的应用
    4G工业路由器应用于远程医疗设备监控
    串口服务器在饮料自动化生产线的应用
    PLC和串口服务器在数字化工厂中的作用
    LoRa集中器在石油勘探等领域的应用解决方案
    4G模块为基础的物联网在精准农业中的应用
    4G工业路由器在垃圾和废水处理的应用案例
    HDU 6205 2017沈阳网络赛 思维题
  • 原文地址:https://www.cnblogs.com/shineqiujuan/p/1748276.html
Copyright © 2011-2022 走看看