Как метод Ruby модифицируется на месте - PullRequest
0 голосов
/ 13 февраля 2019

Как написать 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 на месте:

a.fulljoin!

Какой синтаксис для этого?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Изначально a - это Array .Если бы вы могли написать метод a.fulljoin! с желаемым результатом, a стал бы String , но это не возможно в Ruby.

Но a.fulljoin! может преобразовать a в Массив с одним элементом a[0] - Строка , которая вам нужна.И это будет как можно ближе к вашей цели:

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'"]

PS: Как предлагает @ engineermnky , метод fulljoin! можно упростить до:

class Array
  def fulljoin!
    self.replace(["'#{self.join("', '")}'"])
  end
end
0 голосов
/ 13 февраля 2019
a.join(' ')
"Alex Bert Charlie"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...