红宝石!方法或过程

Ric*_*h_F 2 ruby block proc

我想要修改一个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]
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*kin 7

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

linebreak = ->(text) { text.replace text.split("\n").join(",") }
a = "foo\nbar"
linebreak[a]
#? "foo,bar"
a
#? "foo,bar"
Run Code Online (Sandbox Code Playgroud)

什么是不可能的,是改变类到位,这就是为什么split不起作用(调用字符串,它返回一个数组.)

  • `!`是**仅用于*对**方法的约定,***仅用于变异.例如`Process :: exit!`与变异无关,而`String#clear`没有爆炸. (4认同)