Ruby方法如何就地修改

时间:2019-02-13 15:48:06

标签: ruby methods

一个人如何编写Ruby修改方法?

我要完成以下任务:

def fulljoin(ruby_array)
  r = ''
  ruby_array.each {|item| r += "'#{ item }', "}
  r.chop!.chop!
end

a = ['Alex', 'Bert', 'Charlie']
a = fulljoin(a)             # => 'Alex', 'Bert', 'Charlie'

但是我想在适当的位置修改数组:

a.fulljoin!

完成此操作的语法是什么?

2 个答案:

答案 0 :(得分:1)

最初a是一个数组。如果您可以编写具有理想结果的方法a.fulljoin!,则a将成为 String ,但是在Ruby中是不可能的。

但是a.fulljoin!可以将a转换为具有单个成员a[0] Array - 您需要的字符串。这将尽可能接近您的目标:

class Array
  def fulljoin!
    r = "'#{self.join("', '")}'"
    self.clear
    self[0] = r
  end
end

a = ["Alex", "Bert", "Charlie"]
a.fulljoin!
p a
=> ["'Alex', 'Bert', 'Charlie'"]

P.S .:如@engineersmnky所建议,方法fulljoin!可以简化为:

class Array
  def fulljoin!
    self.replace(["'#{self.join("', '")}'"])
  end
end

答案 1 :(得分:-2)

a.join(' ')
"Alex Bert Charlie"