ruby中的变量赋值
4.4.1 深入分析变量赋值
给变量赋值,好像是使得变量等于赋值表达式右侧的对象:
现在,可以做puts str或其他操作,如果做的是put str,str会给出字符串"Hello",如果是其他操作,则str会做其他处理。
现在请看下面这个例子:
这个例子也是输出"Hello"。由于已经把str赋值给abc,很明显变量abc也包含了"Hello"。
下一个例子涉及一个名为replace的方法,它会用新的文本在原位置替换字符串的内容:
请仔细地观察输出:
第一个"Goodbye"是输出str的结果;第二个"Goodbye"是输出abc的结果。但是我们只替换了str。为什么abc中的字符串也被替换了呢?
答案是,Ruby中的变量(除了一些例外的情况,我们会在后面讨论)不保存对象的值。str并不包含文本"Hello",而是包含了一个到字符串对象的引用。正是这个字符串对象包含了构成"Hello"的那些字母。
当你在左侧使用变量、在右侧使用对象来执行一个赋值操作时,变量接收到对象的一个引用。当你在左侧使用变量、在右侧也使用变量来执行一个赋值操作时,左侧的变量接收到右侧的变量所引用的对象的一个引用。
下面的代码
实际上是在让str做下面这样一件事:
用"Good bye"替换你所引用的字符串对象的内容。
变量abc包含了同一个字符串对象的另一个引用。所以,尽管replace消息是发送给str的,但仍然导致了abc所引用的对象的改变。
因此,当输出abc时,我们看到的结果是:abc引用的字符串的内容已经改变了。
1.掌握引用
如果你已经在具有指针或引用或任意类似结构的语言中做过编程,那么Ruby的引用并不难理解。但是如果没有此类经验,你需要对它们进行一些思考。
Ruby中的每一个对象可以且必须有一个或多个引用指向它(如果没有引用指向它,则被认为是已死的,它的内存空间被释放和重新使用)。
如果通过对象的一个引用对它进行操作(改变它),那么改变的是对象本身。因为一个对象的所有引用都指向同一个对象,所以,通过一个引用所做的修改会在通过另一个引用检查该对象时反映出来(例如前面的例子中的str和abc)。
变量包含的是对象的引用。当变量出现在消息发送记法(即点操作符)的左侧时,一条消息就被发送到该变量包含的引用所指向的对象。如果另外的变量也包含同一个对象的引用,那么发送消息给此变量或彼变量,效果是一样的。例如,如果我们用abc.upcase!代替str.upcase!,那么结果是一样的:两个引用指向的同一个字符串被改变。
以上摘自《Ruby for Rails》
===============================================
python中的变量赋值
了解了这几个概念,我们可以明白,在python中一个变量并没有类型,它的类型完全取决于它所指向的对象。ARM+LINUX 嵌入式博客
http://blog.chinaunix.net/u1/58780/index.html
嵌入式软件
http://blog.csdn.net/embeddedsoft
诚诚恳恳做人踏踏实实编程
http://blog.sina.com.cn/u/1244756857
和我风格相似的一个blog
http://blogger.org.cn/blog/more.asp?name=newqiang&id=11178
硬件、固件、软件研发
http://blog.donews.com/21cnbao
讲linux比较多
http://hi.baidu.com/boshenshen/
又是一个杂而全的blog
http://www.cublog.cn/u/21790/showart_444254.html
DOS下编程技术
http://hengch.blog.163.com/