В PHP (> = 5.0), является передающим ссылкой быстрее?

Вы можете создать рекурсивную функцию с помощью этого класса:

public class Recursive<I> {
    private Recursive() {

    }
    private I i;
    public static <I> I of(Function<RecursiveSupplier<I>, I> f) {
        Recursive<I> rec = new Recursive<>();
        RecursiveSupplier<I> sup = new RecursiveSupplier<>();
        rec.i = f.apply(sup);
        sup.i = rec.i;
        return rec.i;
    }
    public static class RecursiveSupplier<I> {
        private I i;
        public I call() {
            return i;
        }
    }
}

И тогда вы можете использовать любой функциональный интерфейс всего в 1 строке, используя лямбда и определение вашего функционального интерфейса, как показано ниже:

Function<Integer, Integer> factorial = Recursive.of(recursive ->
        x -> x == 0 ? 1 : x * recursive.call().apply(x - 1));
System.out.println(factorial.apply(5));

Я нашел это очень интуитивно понятным и простым в использовании.

64
задан molf 23 July 2009 в 15:41
поделиться

3 ответа

Механизм Зенда использует копию на записи, и когда Вы используете ссылку сами, это подвергается небольшим дополнительным издержкам. Может только найти это упоминание во время записи, хотя, и комментарии в руководство содержит другие ссылки.

(РЕДАКТИРОВАНИЕ) страница руководства на Объекты и ссылки содержат немного больше информации о том, как переменные объекта отличаются от ссылок.

33
ответ дан hakre 24 November 2019 в 15:47
поделиться

Я вполне уверен, что не, это не быстрее. Кроме того, это говорит конкретно в руководстве, чтобы не попытаться использовать ссылки для увеличения производительности.

Редактирование: не Может найти, где это говорит, что, но это там!

4
ответ дан Greg 24 November 2019 в 15:47
поделиться

Нет никакой потребности в добавлении & оператор при передаче объектов. В PHP 5 + объекты передаются ссылкой так или иначе.

-2
ответ дан Michał Rudnicki 24 November 2019 в 15:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: