Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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中的同一语句中设置变量并对其进行修改_Ruby_Variables - Fatal编程技术网

在Ruby中的同一语句中设置变量并对其进行修改

在Ruby中的同一语句中设置变量并对其进行修改,ruby,variables,Ruby,Variables,我遇到过很多情况,我用一个方法修改一个变量,并将其设置为修改后的值,例如 value = "string" value.modify #=> "new string" value #=> "string" value = value.modify value #=> "new string" 我注意到许多Ruby方法都有value.modify仅此功能的变量 Ruby中是否有做value=value.modify的速记? 如果我曾经做过我自己的修改方法我将如何实现它?这实际上

我遇到过很多情况,我用一个方法修改一个变量,并将其设置为修改后的值,例如

value = "string"
value.modify #=> "new string"
value #=> "string"
value = value.modify
value #=> "new string"
我注意到许多Ruby方法都有
value.modify仅此功能的变量

Ruby中是否有做
value=value.modify
的速记?
如果我曾经做过我自己的
修改方法我将如何实现它?

这实际上取决于类的实现方式。这些bang方法在不可变的对象(如符号或fixmum)上实际上是不可能的。对于数组之类的可枚举项,有一个
replace()
方法可以让您编写如下任何方法:

def bang()
  replace(this.non_bang)
end
def non_bang(*args)
  clone.bang(*args)
end
如果您查看许多bang方法的源代码,您将看到通常bang方法包含代码的内容,而非bang方法只需在对象上调用
dup()
clone()
,然后调用方法的bang版本,如下所示:

def bang()
  replace(this.non_bang)
end
def non_bang(*args)
  clone.bang(*args)
end

在我看来,函数式编程的方法不改变对象通常是可取的,而写出
var=var.method
或类似的方法也不是那么糟糕。还有更大、更糟糕的代码问题需要担心。是的,我可以看出这在调试时是一个问题。枚举不一定有
replace
方法,但字符串有,所以这可能对OP有用。啊,很好的调用,我知道字符串和数组都有
replace()
,只是假设它无处不在。