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 是一个数组。)
我想就地修改 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 是一个数组。)