Два приложения для направляющих, совместно использующие образцовую папку

Цитата из Блог Эрика Липперта :

Оценка арифметического выражения контролируется тремя наборами правил: правилами приоритета, правилами ассоциативности и правилами порядка.

Правила приоритета описывают, как заключить в нижеследующее выражение выражение, когда выражение смешивает разные типы операторов.

Правила ассоциативности описывают, как должно быть заключено в нижеследующее выражение, когда выражение имеет связку одного и того же оператора.

Порядок правил оценки описывает порядок, в котором оценивается каждый операнд в выражении.

blockquote>

Более высокий приоритет приводит к группировке операндов с помощью оператора и не означает оценку операндов. Это порядок оценки, который определяет последовательность оценки подвыражений в выражении.


Обновление:

Как я вижу, многие программисты считают, что оператор

a = ++a * ( ++a + 5);  

будет вызывать неопределенное поведение. Да, он будет вызывать UB, если нет гарантии порядка оценки операндов оператора.

Но это не так в контексте языка Java-программирования. Он имеет четко определенное поведение в java (а также в C #). Спецификация языка Java гласит, что:

15.7. Порядок оценки

Язык программирования Java гарантирует, что операнды операторов, по-видимому, оцениваются в определенном порядке оценки, а именно слева направо.

blockquote>

Пример 15.7.1-1. Левый операнд оценивается сначала

В следующей программе оператор * имеет левый операнд, который содержит назначение переменной и правый операнд, содержащий ссылку к той же переменной. Значение, созданное ссылкой, будет отражать тот факт, что назначение произошло первым.

class Test1 {
    public static void main(String[] args) {
        int i = 2;
        int j = (i=3) * i;
        System.out.println(j);
    }
}

Эта программа производит вывод:

9

Не разрешено для оценка оператора * для получения 6 вместо 9 .

blockquote>

Но, по-прежнему спецификация java четко заявляет, что не писать такие коды:

Рекомендуется, чтобы код не опирался на эту спецификацию. Код обычно более ясен, когда каждое выражение содержит не более одного побочного эффекта, как его внешнюю операцию, и когда код не зависит от того, какое именно исключение возникает из-за оценки выражений слева направо.

BLOCKQUOTE>

22
задан GEOCHET 1 June 2009 в 17:34
поделиться

4 ответа

svn:externals или подмодули мерзавца являются определенно способом пойти для этого вида ситуации.

, Конечно, Вы захотите быть в состоянии протестировать их в обоих приложениях, таким образом, необходимо будет совместно использовать образцовые тесты или спецификации также. Но помните, что модели часто зависят от плагинов, таким образом, Вы захотите совместно использовать свою папку плагинов, также. И Вы, вероятно, хотите те же драгоценные камни и ту же версию направляющих, таким образом, Ваш лучший выбор состоит в том, чтобы совместно использовать всего поставщика. О, и иногда Ваш код в lib изменяет Ваши модели, таким образом, Вы захотите совместно использовать это. О, и убеждаться совместно использовать любую пользовательскую конфигурацию в файлах среды.

И Вы захотите настроить непрерывный сервер интеграции для выполнения набора тестов на обоих приложениях в случае, если изменения в образцовом уровне в основном приложении повреждают другое приложение.

, Но я имею в виду, однажды все, что разработано, svn:externals, или подмодули мерзавца являются определенно способом пойти для этого вида ситуации.

Обновление (несколько лет спустя)

Механизмы направляющих в настоящее время являются, вероятно, лучшим выбором для того, чтобы надежно совместно использовать типовой кодекс между несколькими приложениями. Они могут быть gemified и включенный в Gemfile из каждого приложения.

6
ответ дан Ian Terrell 29 November 2019 в 05:38
поделиться

Я работаю над проектом, который имеет подобную проблему, и мы использовали svn:externals для совместного использования типового кодекса между двумя приложениями.

В основном Вы имеете модели diretory в одном svn проекте и используете внешнее в другом проекте совместно использовать код. Можно отредактировать код в любом проекте, и он будет обновлен, когда Вы будете работать svn up в другом проекте.

Насколько направляющие и Ваши сценарии сборки обеспокоены, что эти два каталога моделей абсолютно отдельные.

4
ответ дан Joe Mahoney 29 November 2019 в 05:38
поделиться

Просто любопытный - почему бы не одно приложение с двумя режимами?

у меня есть одно приложение, которое похоже на одно из дюжины различных приложений, выпущенных под брендом по-другому и с другой функциональностью, в зависимости от которого URL Вы входите на и кто Вы входите в систему как. У моих пользователей есть роли, и я добавил метод к ActiveRecord:: Основа, которая дает Вам текущего пользователя. Таким образом я могу сделать материал как:

MAX_VOLUME = current_user.admin? ? 11 : 10
validates_inclusion_of :volume, :in => 0..MAX_VOLUME # Admins can go to 11!

И в представлениях, наполните как это:

<%= render :partial => common_tabs %>
<%= render :partial => admin_tabs if @current_user.admin? %>
1
ответ дан Sarah Mei 29 November 2019 в 05:38
поделиться

Да, создайте символическую ссылку на каталог моделей, но затем добавьте переменную среды в свой environment.rb для каждого экземпляра. Тогда ваши модели смогут узнать, какой экземпляр его использует, и включить дополнительные проверки, а какие нет.

в environment.rb:

APP_INSTANCE = "app1"

в model.rb

validates_length_of :name, :within => 3..100, :if => :is_app_one?

def is_app_one?
    APP_INSTANCE == "app1"
end
2
ответ дан 29 November 2019 в 05:38
поделиться
Другие вопросы по тегам:

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