вопрос об имени конструктора компонента ColdFusion

Ben Gottlieb прав, но существует более быстрый способ получить URL: можно щелкнуть правой кнопкой по любому значку приложения в iTunes и выбрать "URL iTunes Store копии".

Тогда вызов UIApplication openURL на нем.

6
задан Peter Boughton 10 July 2009 в 11:31
поделиться

3 ответа

Должен ли я использовать имя init в качестве имени конструктора?

Нет, вы можете назвать функцию инициализации как угодно. init () - это просто соглашение. И это не настоящий конструктор, поскольку он не вызывается автоматически.

если я создаю экземпляр компонента, не вызывая метод init, что возвращается?

Экземпляр компонента возвращается, как и следовало ожидать. . Наличие или отсутствие функции init () совершенно не имеет значения. В компонентах ColdFusion нет понятия статических функций, вы всегда получаете полностью сконструированный экземпляр из GetObject ("component", ...) . (Не так для объектов Java, которые создаются непосредственно перед первым использованием, если вы забыли / не сделали это вручную. )

могу ли я извлечь код из метода инициализации и удалить метод инициализации, а затем вставить код в заголовок компонента, имеет ли он тот же эффект, что и конструктор инициализации?

Да, при условии, что метод init () не принимал никаких параметров, разницы нет.

Однако существует соглашение о существовании метода init () , который возвращает экземпляр компонента. Даже если он ничего не делает, кроме « ». Я оставался последовательным и добавлял по одному к каждому компоненту, даже если это не было строго необходимым.

Однако существует соглашение о существовании метода init () , который возвращает экземпляр компонента. Даже если он ничего не делает, кроме « ». Я оставался последовательным и добавлял по одному к каждому компоненту, даже если это не было строго необходимо.

Однако существует соглашение о существовании метода init () , который возвращает экземпляр компонента. Даже если он ничего не делает, кроме « ». Я оставался последовательным и добавлял по одному к каждому компоненту, даже если это не было строго необходимым.

13
ответ дан 8 December 2019 в 04:55
поделиться

Ответ Томалака верен для ColdFusion 8; однако все немного изменилось с ColdFusion 9, который должен выйти в конце этого года. (Для полноты картины я скопирую ответ Томалака и внесу необходимые поправки, так что спасибо за фору. :))


Должен ли я использовать имя init в качестве имени конструктора?

CF8: Нет, вы можете назвать функцию инициализации как угодно - «init» - это просто соглашение. И это не настоящий конструктор, поскольку он не вызывается автоматически.

CF9: Ответ по-прежнему «нет», вы не должны . Но, возможно, вам следует: Это относится к созданию объектов в cfscript (или компонентах, содержащих только сценарии, которые также входят в CF9). Ключевые слова import и new добавляются, и вы сможете создать экземпляр объекта следующим образом:

import model.security.*;
userObj = new User();

Предполагается, что у вас есть пользователь . cfc внутри папки model / security / . Кроме того, CF9 будет искать либо метод с именем "init", либо метод с тем же именем, что и объект (в данном случае "Пользователь"), и неявно вызывает его как конструктор.

Я не уверен, что передача аргументов в директиву new перенаправит их в конструктор, как вы могли бы видеть в Java / C. Я предполагаю, что так и будет, но я еще не видел никаких презентаций или примеров кода, указывающих на тот или иной путь; и сам не тестировал, потому что это пришло мне в голову, когда я писал это. ;) (Еще одна идея: Интересно, будут ли поддерживаться несколько конструкторов с разными наборами аргументов. Я сомневаюсь в этом, но это отличная идея.)

Я предполагаю, что есть некоторое предположение, что аналогичная функциональность может отображаться в CFML (язык на основе тегов, отдельный от cfscript), но на данный момент об этом ничего не сказано. .

Если я создам экземпляр компонента без вызова метода init, что будет возвращено?

Экземпляр компонента возвращается, как и следовало ожидать. Наличие или отсутствие функции init () не имеет значения. В компонентах ColdFusion нет понятия статических функций, вы всегда получаете полностью сконструированный экземпляр из GetObject ("компонент", ...). (Не так для объектов Java, которые создаются непосредственно перед первым использованием, если вы забыли / не сделали это вручную. )

Могу ли я извлечь код из метода инициализации и удалить метод инициализации, а затем вставить код в заголовок компонента, имеет ли он тот же эффект, что и конструктор инициализации?

Да, пока , поскольку метод init () не принимает никаких параметров, нет никакой разницы.

Тем не менее, существует соглашение о наличии метода с именем init (), который возвращает экземпляр компонента («this»). Даже если он ничего не делает, кроме « вернуть это; ». Я бы оставался последовательным и добавлял по одному к каждому компоненту, даже если это не было строго необходимо.

это соглашение о наличии метода с именем init (), который возвращает экземпляр компонента («this»). Даже если он ничего не делает, кроме « вернуть это; ». Я бы оставался последовательным и добавлял по одному к каждому компоненту, даже если это не было строго необходимо.

это соглашение о наличии метода с именем init (), который возвращает экземпляр компонента («this»). Даже если он ничего не делает, кроме « вернуть это; ». Я бы оставался последовательным и добавлял по одному к каждому компоненту, даже если это не было строго необходимо.

10
ответ дан 8 December 2019 в 04:55
поделиться

Некоторые сторонние библиотеки / фреймворки могут ожидать, что init будет функцией конструктора (очевидно, до CF9) . Например, Я считаю, что ColdSpring ищет метод с именем init при попытке передать аргументы конструктора.

В ответ на ответ Адама я почти уверен, что несколько конструкторов не будут частью CF9, поскольку это требуется перегрузка метода, о которой я ничего не слышал. Обычный обходной путь - воспользоваться преимуществами Duck typing и проверить аргументы для типа, а также предоставить необязательные аргументы (возможность передавать именованные аргументы делает это довольно простым для обработки).

Ссылка на презентацию Шона Корфилда по Duck Typing: http://corfield.org/articles/ducktyping_cfunited.pdf

1
ответ дан 8 December 2019 в 04:55
поделиться
Другие вопросы по тегам:

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