在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()
,只是假设它无处不在。