首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fixnum对象增加后值不变

Fixnum对象增加后值不变
EN

Stack Overflow用户
提问于 2018-11-25 22:41:58
回答 1查看 58关注 0票数 0

我刚开始学习Ruby,遇到了这两个函数:

代码语言:javascript
复制
def increase(n)
    n = n + 1
    return n
end

def add_element(array, item)
    array << item
end

当我尝试使用n=5增加(N)时

代码语言:javascript
复制
c = 5
p10.increase(c)
print("c is #{c}\n")
print("c.class is #{c.class}\n")
--> c is 5
--> c.class is Fixnum

C的值在increase(n)内增加后不变

当我尝试用add_element修改数组arr = 1,2,3,4的内容时,arr确实改变了。

代码语言:javascript
复制
arr = [1, 2, 3, 4]
p10.add_element(arr, 5)
print("array is #{arr}\n")
--> array is [1, 2, 3, 4, 5]

那么,如果Ruby中的一切都是object,为什么arr会改变它的值,而c(一个Fixnum对象)却不会改变它的值呢?

非常感谢您的想法。:)谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-11-25 22:51:38

Ruby中有一些“特殊”的对象是不可变的。Fixnum就是其中之一(其他是布尔值、nil、符号、其他数字)。Ruby也是通过值传递的。

n = n + 1不修改n,它在increase的作用域中重新分配一个局部变量。因为Fixnum不是可变的,所以没有方法可以用来改变它的值,这与数组不同,数组可以用多个方法来改变,<<就是其中之一。

add_element使用<<显式修改传递的对象。如果将方法体更改为

代码语言:javascript
复制
array = array + [item]

那么第二个示例中的输出将是array is [1, 2, 3, 4],因为它仅仅是一个局部变量的重新赋值。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53468624

复制
相关文章

相似问题

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