Ruby!方法或过程

Ruby ! Methods or Procs

我想就地修改 variable,复制 methodname! 语法,而不是将新的修改值重新分配给相同的 var。我可以用 proc 做到这一点吗?我仍在学习 procs 并认为它们非常有用且使用得当。

a = "Santol bag 85.88   www.example.com/products/16785
Shaddock    kg  2.94    www.example.com/products/4109
Palm Fig    5kg 94.34   www.example.com/products/23072
Litchee lb  95.85   www.example.com/products/2557"

a = a.split("\n")

linebreak = Proc.new { |text| text.split("\n") }
linebreak![a]

第一次重新分配似乎很麻烦。 proc 版本我想看看我是否可以内联执行它。这可能吗?

methodname! 只是一个约定 - 通常有两种 flavours 相同的方法 - 一种没有 bang,一种有 bang。如果你想要一个改变它的参数的过程,你需要使用改变方法来实现它。

在这种情况下这是不可能的,因为您正试图将字符串转换为数组。您必须重新分配变量:

linebreak = Proc.new { |text| text.split("\n") }
a = linebreak.call(a)

这个肯定可以,只需要原地修改字符串即可

linebreak = ->(text) { text.replace text.split("\n").join(",") }
a = "foo\nbar"
linebreak[a]
#⇒ "foo,bar"
a
#⇒ "foo,bar"

不可能的是,就地更改 class,这就是 split 不起作用的原因(在字符串上调用,它 returns 是一个数组。)