Определенное соответствие в сопоставлении шаблонов JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Определенное соответствие в сопоставлении шаблонов Java

Сообщение Anonymous »

У меня есть некоторые сомнения относительно некоторых частей определенного соответствия в спецификации языка Java.
Например, в 6.3.1.1:

Оператор условного «И» && Следующие правила применяются к выражению условного «и» a && b (§15.23):
• Переменная шаблона, представленная когда true определенно соответствует
в b.
• Переменная шаблона вводится с помощью && b, когда true, если либо
( i) он вводится через a, когда истинно, или (ii) он вводится через b
, когда истинно.
Следует отметить, что здесь не существует правила для введения шаблонной
переменной с помощью && b, когда она ложна. Это связано с тем, что невозможно
определить во время компиляции, какой операнд будет иметь значение false.

Я не знаю Я не понимаю, почему причина в том, что «нет правил для введения переменной шаблона с помощью && b, когда она ложна». "невозможно определить во время компиляции, какой операнд будет иметь значение false".
Если да,

Код: Выделить всё

a instanceof String s
затем переменная шаблона    вводится этим выражением только тогда, когда значение этого выражения равно  true .
Таким образом, мы можем сказать, что «переменная шаблона s вводится выражением экземпляра Строка s, когда true".
Независимо от того, является ли это «когда true» или «когда false», они оба кажутся просто сочинениями, созданными путем предсказания ценности выражение. (Или, скорее, они принимают во внимание значение выражения.)
Я думаю, что это полностью отличается от «когда истинно» или «когда ложь", которые отображаются в определенном назначении.
Например:

Код: Выделить всё

{
int k;
int n = 5;
if (n > 2)
k = 3;
System.out.println(k); /* k is not "definitely assigned"
before this statement */
}
16.2.7:

Следующие правила применяются к оператору if (e) S :
• V [не]назначается после if (e) S тогда и только тогда, когда V [не]назначается после S и V >
[не]назначается после e когда false.

Я думаю, что если «when false» здесь то же самое, что и в definite соответствует, то k здесь будет определенно назначен.
Поэтому я думаю, что определенное присвоение не подходит t учитывать значение выражения (кроме некоторых выражений с константы времени компиляции), (как указано в спецификации), (как и в этом примере), но определенное соответствие очевидно учитывает значение выражения(Точно так же, как в предыдущий пример).
В этом случае, я думаю, мне следует добавить следующее после 6.3.1.1:
Переменная шаблона — это вводится через && b, когда false тогда и только тогда, когда
(i) оно вводится с помощью a, если ложно, или (ii) оно вводится с помощью a
, когда истинно, или (iii) оно вводится с помощью b, когда a истинно.
Я думаю, в этом нет ничего плохого, потому что я просто рассматриваю значения этих выражений и записываю прогнозируемые ситуации. ничего общего со значениями во время компиляции.
Однако сноска полностью отличается от моей точки зрения и описывает причины, которые я вообще не понимаю.
Поэтому я здесь, чтобы попросить о помощи. . Спасибо, что читаете и отвечаете.

Подробнее здесь: https://stackoverflow.com/questions/792 ... n-matching
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»