Ответ 1
Я считаю, что нет возможности автоматически выбрать ROr a b
; это нарушало бы предположение открытого мира, если, например, b
было выполнено, но позже a
было выполнено; любое правило разрешения конфликтов обязательно приведет к добавлению экземпляра для изменения поведения существующего кода.
То есть, выбор R
, когда b
выполняется, но a
не нарушает предположения открытого мира, поскольку он предполагает принятие решения о том, что экземпляр не выполняется; 1 даже если вы добавлен конструктор "оба удовлетворены", вы сможете использовать его, чтобы решить, нет ли экземпляра (если вы видите L
или R
).
Поэтому я не считаю, что такое ограничение или ограничение возможно; если вы можете наблюдать, какой экземпляр вы получаете, то вы можете создать программу, поведение которой изменяется путем добавления экземпляра, и если вы не можете наблюдать, какой экземпляр вы получаете, то это довольно бесполезно.
1 Различие между этим и нормальным разрешением экземпляра, которое также может потерпеть неудачу, заключается в том, что, как правило, компилятор не может решить, что ограничение выполнено; здесь вы просите компилятор решить, что ограничение не может быть выполнено. Тонкая, но важная разница.