首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果在Ruby中,这一切都是一个对象,为什么这不起作用呢?

如果在Ruby中,这一切都是一个对象,为什么这不起作用呢?
EN

Stack Overflow用户
提问于 2011-10-07 14:06:04
回答 5查看 10.9K关注 0票数 12

考虑到在Ruby编程语言中,所有的东西都被认为是一个对象,我认为将参数传递给方法是通过引用来完成的。然而,下面这个小小的例子让我感到困惑:

代码语言:javascript
复制
$string = "String"

def changer(s)
  s = 1
end

changer($string)

puts $string.class
String
 => nil

正如您所看到的,原始对象没有被修改,我想知道为什么是,以及我如何才能完成期望的行为,即。获取方法来实际更改其参数所引用的对象.

EN

Stack Overflow用户

发布于 2011-10-07 14:23:44

赋值不将值绑定到对象,而是将对象引用绑定到标识符。参数传递的工作方式也是一样的。

当您输入函数的主体时,世界如下所示:

代码语言:javascript
复制
 +---+                  +----------+
 | s |----------------->| "String" |
 +---+                  +----------+
                              ^
 +-------+                    |
 |$string|--------------------+
 +-------+

密码

代码语言:javascript
复制
 s = 1

让世界看起来像

代码语言:javascript
复制
 +---+       +---+      +----------+
 | s |------>| 1 |      | "String" |
 +---+       +---+      +----------+
                              ^
 +-------+                    |
 |$string|--------------------+
 +-------+

赋值语法操纵变量,而不是对象。

与许多类似的语言(Java、C#、Python)一样,ruby是按值传递的,其中的值通常是引用的。

若要操作string对象,可以在字符串上使用方法,例如s.upcase!。这类事情将反映在方法之外,因为它操作对象本身。

票数 17
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7688391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档