Ruby - методы цепочки и возвращаемый массив - PullRequest
2 голосов
/ 05 августа 2010

У меня есть несколько методов для класса, которые возвращают массивы, такие как ["1", "3", "2", "6", "2"]. Это нормально, что это строковые массивы, а не числа. У меня есть другой метод, который принимает массив и превращает его в одну строку, как это 1 3 2 6 2.

class Turn
  def initialize
    @rolls = 1
    @dice = []
  end

  def roll
    @roll = []
    x = 5 - @dice.length
    x.times do |i|
      @roll[i] = rand(6) + 1
    end
    @roll  # ["1", "3", "2", "6", "2"]
  end

  def show
    @dice  # ["1", "3", "6"]
  end

  def line(something)
    temp = ""
    something.each do |x|
      temp << x + " "
    end
    puts temp   # "1 3 6 " or "1 3 2 6 2 "
  end
end

Тогда я хочу иметь возможность объединять методы, чтобы я мог сделать

first = Turn.new
first.roll.line
first.show.line

Однако я действительно не знаю, как это сделать, и я не смог найти, как в Интернете. Я видел, как вернули self, но я не могу понять, что он делает. Код в методе line сработает, если я переместу его в другой метод, поэтому проблема в действительности заключается только в цепочках и возвратах.

Если бы кто-то мог не только помочь с кодом, но и с тем, как работает цепочка применительно к возвращаемым значениям и как работает возвращение себя, это было бы здорово.

Спасибо!

1 Ответ

2 голосов
/ 05 августа 2010

Поскольку ваши методы #roll и #show возвращают массив, вам нужно определить метод Array#line, чтобы на самом деле иметь возможность first.roll.line.

Кстати, уже есть Array#join который также соединяет элементы массива вместе со строкой, как ваш метод #line, так что вы также можете использовать first.roll.join(' ') и избавиться от вашего метода #line.

...