Язык ввода-вывода: Исключение: объект не отвечает на URL
Сегодня я использую пример "семь языков за семь недель".
Пример кода:
futureResult := URL with("http://google.com/") @fetch
writeln("Do something immediately while fetch goes on in background...")
writeln("This will block until the result is available.")
writeln("fetched ", futureResult size, " bytes")
Запуск за исключением:
Io$ io future.io
Exception: Object does not respond to 'URL'
---------
Object URL future.io 1
CLI doFile Z_CLI.io 140
CLI run IoState_runCLI() 1
Непосредственно запустить URL в IO со следующей ошибкой:
~$ io
Io 20110905
Io> URL
Exception: Object does not respond to 'URL'
---------
Object URL Command Line 1
Io>
Моя среда это:
Убунту 14.04
2 ответа
Следуя посту, я сделал следующее:
$ sudo apt-get install libevent-dev
$ ./build.sh
$ ./build.sh install
Ошибка URL исправлена. Но выдается следующая ошибка:
Сделайте что-нибудь немедленно, пока выборка продолжается в фоновом режиме... Это будет блокировать, пока результат не станет доступен. исключение: Ошибка не отвечает на размер --------- Размер ошибки
future.io 6 Размер ошибки future.io 6 CLI doFile Z_CLI.io 140 CLI запускается
IoState_runCLI() 1
Пост помогите установить Io
Для всех, кто, как и я, спустя годы столкнулся с этой проблемой (или любой другой проблемой «Исключение: объект не отвечает на X»), следуя вместе с Брюсом Тейтом «Семь языков за семь недель», решение может быть следующим :
Есть некоторые объекты/библиотеки, которые, судя по документации, должны быть включены в ядро Io, но это не так. Вы должны установить их как аддоны с жутким.
Для этого следуйте инструкциям здесь. По сути, вам нужно найти правильный аддон в группе IoLanguage на Github и установить его.
Эта конкретная проблема с объектом URL еще больше осложняется парой проблем, о которых я расскажу ниже.
- Надстройки для URL нет, вместо этого функциональность для URL покрывается надстройкой под названием Socket (находится здесь ).
- Чтобы получить жуткую установку Socket, вам сначала нужно установить что-то под названием libevent. Я сделал это, зайдя на веб-сайт libevent , загрузив самую последнюю стабильную версию, распаковав файлы в каталог, а затем следуя инструкциям по сборке libevent с помощью CMake на странице libevent на github.
- Объект Socket, похоже, не поддерживает https. Количество веб-сайтов, которые все еще используют http, сокращается. Google, веб-сайт, использованный в примере в книге «Семь языков за семь недель» , отказался от http много лет назад. Первый веб-сайт, который мне удалось найти, который все еще использует http, — это китайский новостной веб-сайт , но вы можете найти и другие примеры, погуглив «Веб-сайты, все еще использующие http».
После учета всех этих проблем я, наконец, заставил свою версию кода работать.
url := URL with("http://xinhuanet.com/")
// Had to find a website still using http, https is unsupported by Socket.
futureResult := url @fetch
// Moved this call to own line for personal clarity
writeln("Do something immediately while fetching.")
writeln("The below statement will block until the result is available.")
writeln("fetched ", futureResult size, " bytes") // Blocks until complete
И мой вывод выглядит так:
Do something immediately while fetching.
The below statement will block until the result is available.
fetched 99992 bytes