zoukankan      html  css  js  c++  java
  • Ruby变量

    每个变量保存一个对象的引用。

    person = "Tim"

    person.object_id       ->938678

    person.class             ->String

    person                     ->"Tim"

    第一行代码,Ruby使用值“Tim”创建了一个String对象。这个对象的一个引用(reference)被保存在局部变量person中。接下去的快速检查展示了变量具备字符串的特性,它具有对象的ID,类和值。

    那么,变量是一个对象吗?在Ruby中,答案是“不”,变量只是对象的引用。对象漂浮在某处一个很大的池中(大多数时候是堆,即heap中),并由变量指向它们。

    person1 ="Tim"

    person2 =person1

    person1[0] = 'J'

    person1                ->"Jim"

    person2                ->"Jim"

    我们改变了person1的第一个字符,但是person1和person2都从“Tim”改为了“Jim”.

    这都归结于变量保存的是对象引用而非对象本身这一事实。将person1赋值给person2并不会创建任何新的对象;它只是将person1的对象引用拷贝给person2,因此person1和person2都指向同一个对象。

    赋值别名(alias)对象,潜在地给了你引用同一对象的多个变量。你可以通过使用String的dup方法来避免创建别名,它会创建一个新的、具有相同内容的String对象。

    View Code
    1 person1 = "Tim"
    2 person2 = person1.dup
    3 person1[0] = "J"
    4 person1              ->"Jim"
    5 person2              ->"Tim"

    你可以通过冻结一个对象来阻止其他人对其进行改动。试图更改一个被冻结的对象,Ruby将引发(raise)一个TypeError异常。

    person1 = "Tim"
    person2 = person1
    person1.freeze   #prevent modifications to the object
    person2[0] ="J"
    

     输出结果:

    prog.rb:4:in '[]=':can't modify frozen string (TypeError)
    from prog.rb.4
    

     在Ruby中操作的任何东西都是一个对象。

  • 相关阅读:
    Tomcat组件
    Tomcat介绍
    Varnish的VCL
    varnish的架构和日志
    Varnish介绍
    HAProxy的配置
    HAProxy介绍
    KeepAlived的实现示例
    KeepAlived的配置
    vue2.0填坑有感(持续更新ing)
  • 原文地址:https://www.cnblogs.com/timsheng/p/2592322.html
Copyright © 2011-2022 走看看