Ограничение параметра типа не учитывается при использовании универсального типа с неограниченным подстановочным знаком

Я столкнулся с этой проблемой при обновлении до сервера Windows 7 с некоторыми устаревшими приложениями CLASP. Попытка запустить 32-битное приложение на 64-битной машине.

Попробуйте настроить пулы приложений на 32-разрядную совместимость на True и / или создать dsn в 32 и 64 бит.

Откройте окно источника данных odbc в обеих версиях из окна запуска. C: \ Windows \ SysWOW64 \ odbcad32.exe C: \ Windows \ system32 \ odbcad32.exe

2
задан Dmytro Mitin 2 March 2019 в 08:34
поделиться

2 ответа

Я могу ошибаться, но достаточно взглянуть на определение самой функции:

def test(x: X[_]): X[_ <: F] = x

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

, чтобы показать его на практическом примере. скажем, у вас есть что-то вроде этого:

def test(x: Option[_]): Option[_ <: String]

и затем вы называете это проходящим внутри Option[Int]. Вы ожидаете, что это назначение будет правильным?

val result: Option[_ <: String] = test(Some(1): Option[_])
0
ответ дан Sergey Shinkarenko 2 March 2019 в 08:34
поделиться

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

trait F
trait X[A <: F]
def test(x: X[_]): X[_ <: F] = x match { case q: X[t] => q }

Если вы дадите контролеру типов некоторую слабость, позволив Выведите более точные границы для переменной типа t, в конечном итоге выяснится, что t должен быть подтипом F, а затем позволит вам вернуть значение q (которое совпадает с x) без жалоб. Он не делает этого по умолчанию по некоторым нелогичным причинам , что , вероятно, как-то связано с совместимостью с подстановочными символами Java .

(Снова восстановлено; мое первоначальное предположение не показалось слишком далеким, и, учитывая ссылку Дмитрия Митина , по сравнению с ним оно даже не выглядит слишком расплывчатым.) [ 1112]

0
ответ дан Andrey Tyukin 2 March 2019 в 08:34
поделиться
Другие вопросы по тегам:

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