Похоже, что бизнес-правило, которое вы пытаетесь применить, выглядит следующим образом:
P IMPLIES Q
Это логически эквивалентно:
(NOT P) OR Q
Таким образом, вы можете просто написать:
bool IsDry(bool isRaining, bool isWithUmbrella) {
return !isRaining || isWithUmbrella;
}
В зависимости от предиката, сначала может быть проще думать с точки зрения его отрицания.
NOT (P IMPLIES Q)
Теперь мы подставим тождество выше:
NOT ((NOT P) OR Q)
Теперь мы можем применить Закон Деморгана :
P AND (NOT Q)
Поскольку это отрицание, мы должны отрицать это, чтобы вернуться к позитиву. Поначалу двойное отрицание может показаться запутанным, но возвращаясь к примеру, мы имеем:
bool IsDry(bool isRaining, bool isWithUmbrella) {
bool isWet = (isRaining && !isWithUmbrella);
return !isWet;
}
Вот несколько примеров общего boolean
переписывания выражений :
BEFORE | AFTER
________________________________________|________________________________________
|
if (condition == true) ... | if (condition) ...
________________________________________|________________________________________
|
if (condition == false) ... | if (!condition) ...
________________________________________|________________________________________
|
if (condition) { | return condition;
return true; |
} else { |
return false; |
} |
________________________________________|________________________________________
|
if (condition1) { | return (condition1 && condition2
if (condition2) { | && condition3);
if (condition3) { |
return true; |
} else { |
return false; |
} |
} else { |
return false; |
} |
} else { |
return false; |
} |
________________________________________|________________________________________
|
return (condition1 && !condition2) || | return condition1 != condition2;
(condition2 && !condition1); | // or condition1 ^ condition2;
Обратите внимание, что предопределенный ^
в C # является оператором exclusive-or , даже для целочисленных типов (то есть это не оператор возведения в степень) , Предопределенные &&
и ||
являются условными логическими операторами , которые выполняют оценку «короткого замыкания».
Визуализация шаблона действительно должна работать
render :template => "question/answer"
Проблема, с которой вы столкнулись, заключается в том, что партиалы смотрят не в том месте. Исправить это просто, просто сделайте свои частичные данные абсолютными в любых общих шаблонах. Например, в файле question / answer.html.erb должно быть
<%= render :partial => 'question/some_partial' %>
, а не обычное
<%= render :partial => 'some_partial' %>
Вы можете добиться этого с помощью:
render 'question/answer'
Вы можете попробовать плагин inherit_views ( http://github.com/ianwhite/inherit_views/tree/master ), я упомянул здесь в ответе на это вопрос .