在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
每个变量保存一个对象的引用。 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中操作的任何东西都是一个对象。
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论