Краткий ответ: Ruby поощряет объединение методов, Python нет.
Наверное, правильный вопрос: для чего нужна tap
Руби?
Сейчас я не знаю много о Ruby, но, прибегая к гуглу, у меня создалось впечатление, что tap
концептуально полезен как метод цепочки.
В Ruby стиль: SomeObject.doThis().doThat().andAnotherThing()
довольно идиоматичен. Это лежит в основе концепции плавных интерфейсов , например. tap
в Ruby является частным случаем, когда вместо SomeObject.doThis()
вы определяете doThis
на лету.
Почему я все это объясняю? Потому что это говорит нам, почему tap
не имеет хорошей поддержки в Python. С учетом предостережений, Python не делает цепочку вызовов .
Например, методы списка Python обычно возвращают None
, а не возвращают измененный список. Такие функции, как map
и filter
, не являются методами списка. С другой стороны, многие методы массива Ruby возвращают модифицированный массив.
За исключением некоторых случаев, таких как некоторые ORM, код Python не использует свободно распространяемые интерфейсы.
В конце концов, это разница между идиоматическим Ruby и идиоматическим Python. Если вы переходите с одного языка на другой, вам нужно отрегулировать.