露比方法或过程

时间:2019-01-24 13:36:02

标签: ruby block proc

我想就地修改 Col1 Col2 Col3 Col4 Col5 Row1 1 1 2 3 4 Row2 2 5 6 7 8 ,复制variable语法,而不是将新的修改值重新分配给相同的methodname!。我可以使用var吗?我仍在学习proc,并认为使用它们非常有用。

procs

第一次调任似乎很麻烦。我想看看proc版本是否可以内联执行。这可能吗?

2 个答案:

答案 0 :(得分:7)

这肯定是可能的,您只需要就地修改字符串

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

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

答案 1 :(得分:1)

methodname!只是一个约定-通常有两种使用相同方法的味道-一种不爆炸,一种不爆炸。如果要使proc更改其参数,则需要使用mutating方法来实现它。

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

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