Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Fixnum对象在增加后不会更改值_Ruby_Object_Addition_Fixnum - Fatal编程技术网

Ruby Fixnum对象在增加后不会更改值

Ruby Fixnum对象在增加后不会更改值,ruby,object,addition,fixnum,Ruby,Object,Addition,Fixnum,我刚开始学习Ruby,遇到了以下两个函数: def increase(n) n = n + 1 return n end def add_element(array, item) array << item end c值在增量(n)内增加后不变 当我试图用add_元素更改数组arr=[1,2,3,4]的内容时,arr确实发生了变化 arr = [1, 2, 3, 4] p10.add_element(arr, 5) print("array is #{ar

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

def increase(n)
    n = n + 1
    return n
end

def add_element(array, item)
    array << item
end
c值在增量(n)内增加后不变

当我试图用add_元素更改数组arr=[1,2,3,4]的内容时,arr确实发生了变化

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对象)不会改变它的值呢

感谢您的想法。:)谢谢

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

n=n+1
不修改
n
,它在
的范围内重新分配局部变量。
由于
Fixnum
是不可变的,因此没有任何方法可以用来更改其值,不像数组可以用多种方法进行变异,
Ruby中有一些“特殊”对象是不可变的
Fixnum
就是其中之一(其他的是布尔型,
nil
,符号,其他数字)。Ruby也是按值传递的

n=n+1
不修改
n
,它在
的范围内重新分配局部变量。

由于
Fixnum
是不可变的,因此没有任何方法可以用来更改其值,不像数组可以使用多个方法进行变异,
并非所有对象都是可变的。正如你所发现的,数字不是。如果是,则
1+2
的结果可能是任何结果。请参见此处:警告:constant::Fixnum已被弃用:什么是
p10
。并非所有对象都是可变的。正如你所发现的,数字不是。如果是,则
1+2
的结果可能是任何结果。请参见此处:警告:constant::Fixnum已被弃用:什么是
p10
arr = [1, 2, 3, 4]
p10.add_element(arr, 5)
print("array is #{arr}\n")
--> array is [1, 2, 3, 4, 5]
array = array + [item]