zoukankan      html  css  js  c++  java
  • ruby 基础知识(二)

    ruby  中的动态方法 http://singleant.iteye.com/blog/1680382

    Rails 大量使用了符号(symbol)。符号看上去很像变量名,不过以冒号作为前缀。符号的例子包
    括:action、:line_items、:id 等。可以把符号看作字符串文本,不过——如同魔法般地——被变成
    了常量。


    可以把冒号看作“名字叫做……的东西”,因此:id 的意思就是“名字叫做id 的东西”。
    Rails 用符号来给别的东西打上标记。尤其是,Rails 常常用符号来给方法参数命名,以及用作
    hash 的键。譬如说:
    redirect_to :action => "edit" , :id => params[:id]


    ===

    在类定义的主体部分,可以定义类方法和实例方法。只要在方法名的前面加上"self.”前缀(请看
    上述代码的第5 行),就可以让它成为类方法:可以在类层面上调用它。以上述代码为例,我们可以在应
    用程序的任何地方进行下列调用:
    to_collect = Order.find_all_unpaid
    通常的方法定义(请看第9 行对total 方法的定义)则会创建出实例方法(instance method)。
    实例方法必须在对象层面上调用。在下面的例子中,order 变量引用一个Order 对象,total()方法的
    定义如前所述。
    puts "The total is #{order.total}"
    可以看到find_all_unpaid()和total()方法之间的差异。前者并不特定针对某一份订单,因
    此我们在类层面上定义它,并通过Order 类来调用它;后者只对一份订单生效,因此我们将其定义为实
    例方法,并针对一个特定的Order 对象来调用它。

    ==
    对象将内部状态保存在实例变量(instance variable)中,实例变量的名字必须以“@”开头,
    所有实例方法都可以访问它们。每个对象拥有各自独立的一组实例变量

    ==
    模块和类有相似之处:它们都包含一组方法、常量,以及其他类和模块的定义。但和类不同的是,
    你无法创建模块的实例。


    ==

    数组的一个常用方法是<<,该方法会把一个值附加到数组的尾端。
    ages = []
    for person in @people
    ages << person.age
    end

    ==
    Ruby 的hash 与数组非常相似。hash 字面量使用大括号,而不是方括号,并且其中的每个条目必
    须由两个对象组成:前者是索引键,后者是值。譬如说,可以这样建立“乐器”与“乐器种类”之间的对
    应关系。
    inst_section = {
    :cello => 'string' ,
    :clarinet => 'woodwind' ,
    :drum => 'percussion' ,
    :oboe => 'woodwind' ,
    :trumpet => 'brass' ,
    :violin => 'string'
    }
    =>左边的东西是索引键,右边的是与之对应的值。在同一个hash 中,索引键必须唯一,也就是说
    你不能为:drum 建立两个条目。hash 中的键和值可以是任意对象——你甚至可以在hash 中保存数组或
    者别的hash.在Rails 中,通常使用符号来作为hash 的索引键。

    ==

    正则表达式可以用于指定字符的组合模式(pattern),并将其与字符串相匹配。在Ruby 中,创建
    正则表达式的方式通常是/pattern/或者%r{pattern}。
    譬如说,你可以编写一个模式,使之匹配包含“Perl”或者“Python”的字符串。这个正则表达
    式的写法是/Perl|Python/。

    if line =~ /P(erl|ython)/
    puts "There seems to be another scripting language here"
    end

    还可以在模式中指定重复字符(repetition)。例如/ab+c/可以匹配到这样的字符串:其中包含
    一个“a”,其后是一个或多个“b”,再然后是一个“c”。如果把模式中的加号变成星号,/ab*c/匹配到
    的则是这样的字符串:一个“a”,然后是0 个或多个“b”,再然后是一个"c”。


    ==

    简单地说,代码块(block)就是大括号或者do...end 之间的代码。按照惯例,单行的代码块使用
    大括号,多行的代码块使用do/end。
    { puts "Hello" } # this is a block
    do ###
    club.enroll(person) # and so is this
    person.socialize #
    end ###
    代码块只能出现在方法调用的后面:代码块的开始标记必须紧跟在方法调用的同一行。譬如说,在
    下列代码中,包含了“puts "Hi"”的代码块紧跟着对greet()方法的调用。
    greet { puts "Hi" }

  • 相关阅读:
    Python Cookbook(第3版)中文版:15.20 处理C语言中的可迭代对象
    Python Cookbook(第3版)中文版:15.21 诊断分段错误
    Theano环境搭建/安装
    Keras官方中文文档:keras后端Backend
    Keras官方中文文档:函数式模型API
    Keras官方中文文档:序贯模型API
    Keras官方中文文档:关于Keras模型
    Keras官方中文文档:序贯模型
    web服务器原理
    静态网页与动态网页区别
  • 原文地址:https://www.cnblogs.com/keno32/p/5175719.html
Copyright © 2011-2022 走看看