static Main() : void
{
def iterator() : IEnumerable[int] {
mutable i = 0;
while( i < 10 ) {
yield i;
i++;
}
}
foreach( i in iterator() ) {
WriteLine($"i = $i");
}
}
error : yield used in a `loop' function, which is returning void (it should be System.Collections.Generic.IEnumerator[T] or System.Collections.Generic.IEnumerable[T])
Ежели ф-цию вынести в метод — работает.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
♠♠♥♠♠♦♥
Re: Почему в Н я не могу использовать локальные ф-ции в каче
DS>error : yield used in a `loop' function, which is returning void (it should be System.Collections.Generic.IEnumerator[T] or System.Collections.Generic.IEnumerable[T])
Потому-что все циклы в Н реализованы через локальные функции. И если ползволить это делать, то не выйдет реализовать мало-мальски сложную логику.
Если очень хочется иметь локальные генераторы (yield), то можешь воспользоваться макросом Computation Expression и предопределенным билдером для IEnumerable[T] или аналогами для массивов и списков.
За одно, если возникнет вопрос "как на Немерле сделать Async из C# 5.0", то тоже сможешь найти ответ ;).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, VladD2, Вы писали:
VD>Потому-что все циклы в Н реализованы через локальные функции. И если ползволить это делать, то не выйдет реализовать мало-мальски сложную логику.
VD>Если очень хочется иметь локальные генераторы (yield), то можешь воспользоваться макросом Computation Expression и предопределенным билдером для IEnumerable[T] или аналогами для массивов и списков.
Не очень хорошая статья. Нифига не понятно. Какая-то магия: comp, defcomp. Не ясно даже в каком пространстве имен эти компы дефкомпы.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
♠♠♥♠♠♦♥
Re[3]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, DarthSidius, Вы писали:
DS>Здравствуйте, VladD2, Вы писали:
VD>>Потому-что все циклы в Н реализованы через локальные функции. И если ползволить это делать, то не выйдет реализовать мало-мальски сложную логику.
VD>>Если очень хочется иметь локальные генераторы (yield), то можешь воспользоваться макросом Computation Expression и предопределенным билдером для IEnumerable[T] или аналогами для массивов и списков.
DS>Не очень хорошая статья. Нифига не понятно. Какая-то магия: comp, defcomp. Не ясно даже в каком пространстве имен эти компы дефкомпы.
предопределенным билдером для IEnumerable[T] или аналогами для массивов и списков.
DS>>Не очень хорошая статья. Нифига не понятно. Какая-то магия: comp, defcomp. Не ясно даже в каком пространстве имен эти компы дефкомпы.
_NN>Можно посмотреть код: _NN>EnumerableTest
Здравствуйте, DarthSidius, Вы писали:
DS>За это спасибо. Хоть тупо скопирую по аналогии. Если не трудно конечно, а в какой сборке искать ComputationExpressions ?
Здравствуйте, DarthSidius, Вы писали:
DS>Это 100 раз переведенная статья на английский с хабры. Кроме нее про кампутатион экспрессионс на Н больше ничего походу нет. Это как раз про нее:
Не очень хорошая статья. Нифига не понятно. Какая-то магия: comp, defcomp. Не ясно даже в каком пространстве имен эти компы дефкомпы.
Для того чтобы использовать это дело для замены локальным yield-ам, особого описания не требуется. Примеров более чем достаточно. Описание нужно для разработки своих компрешеншонов. Но это явно не всем по зубам, да и нужно не всем.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, _NN_, Вы писали:
_NN>Здравствуйте, DarthSidius, Вы писали:
DS>>За это спасибо. Хоть тупо скопирую по аналогии. Если не трудно конечно, а в какой сборке искать ComputationExpressions ?
_NN>ComputationExpressions.Macros.dll, ComputationExpressions.dll
Спасибо, нашел. Получается немерловые сборки разбросаны по закоулкам всего списка. Извините, конечно, но это косяк. Привык что пр-ва имен, например, System.Data и System.Data.SqlClient можно найти в System.Data.dll
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
♠♠♥♠♠♦♥
Re[6]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, VladD2, Вы писали:
VD>Для того чтобы использовать это дело для замены локальным yield-ам, особого описания не требуется. Примеров более чем достаточно. Описание нужно для разработки своих компрешеншонов. Но это явно не всем по зубам, да и нужно не всем.
В том то и проблема, что документации для простых смертных — без слез не взглянешь.
Здравствуйте, _NN_, Вы писали:
_NN>ComputationExpressions.Macros.dll, ComputationExpressions.dll
Необработанное исключение: System.IO.FileLoadException: Невозможно загрузить файл или сборку "ComputationExpressions, Version=1.1.716.0, Culture=neutral, Public KeyToken=null" или один из зависимых от них компонентов. Требуется сборка со строгим именем. (Исключение из HRESULT: 0x80131044)
в Test1.Program.Main()
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
♠♠♥♠♠♦♥
Re[7]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, DarthSidius, Вы писали:
DS>Здравствуйте, _NN_, Вы писали:
_NN>>Здравствуйте, DarthSidius, Вы писали:
DS>>>За это спасибо. Хоть тупо скопирую по аналогии. Если не трудно конечно, а в какой сборке искать ComputationExpressions ?
_NN>>ComputationExpressions.Macros.dll, ComputationExpressions.dll
DS>Спасибо, нашел. Получается немерловые сборки разбросаны по закоулкам всего списка. Извините, конечно, но это косяк. Привык что пр-ва имен, например, System.Data и System.Data.SqlClient можно найти в System.Data.dll
Ну это snippets , релизное качество никто не гарантирует.
По уму надо бы сделать Nemerle.ComputationExperssions, бесспорно.
Хотите этим заняться ?
DS>Необработанное исключение: System.IO.FileLoadException: Невозможно загрузить файл или сборку "ComputationExpressions, Version=1.1.716.0, Culture=neutral, Public KeyToken=null" или один из зависимых от них компонентов. Требуется сборка со строгим именем. (Исключение из HRESULT: 0x80131044)
DS> в Test1.Program.Main()
Если я не ошибаюсь, то надо пересобрать ComputationExpressions, они раньше могли неправильно собираться.
Сделай "git pull", а потом собери заново. Проверь версии получившихся сборок Nemerle.dll и ComputationExpressions.dll — они должны совпадать.
Здравствуйте, ionoy, Вы писали:
I>Если я не ошибаюсь, то надо пересобрать ComputationExpressions, они раньше могли неправильно собираться. I>Сделай "git pull", а потом собери заново. Проверь версии получившихся сборок Nemerle.dll и ComputationExpressions.dll — они должны совпадать.
Скачал последний релиз: 718
Версии и там и там 1.1.718.0
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
♠♠♥♠♠♦♥
Re[8]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, _NN_, Вы писали:
_NN>>>ComputationExpressions.Macros.dll, ComputationExpressions.dll
DS>>Спасибо, нашел. Получается немерловые сборки разбросаны по закоулкам всего списка. Извините, конечно, но это косяк. Привык что пр-ва имен, например, System.Data и System.Data.SqlClient можно найти в System.Data.dll
_NN>Ну это snippets , релизное качество никто не гарантирует. _NN>По уму надо бы сделать Nemerle.ComputationExperssions, бесспорно. _NN>Хотите этим заняться ?
Да я непротив посильной помощи. Что там надо сделать? С учетом того, что пока эти самые (как их там по русски-то?) экспрессионс для меня еще темный лес.
Здравствуйте, DarthSidius, Вы писали:
DS>Да я непротив посильной помощи. Что там надо сделать? С учетом того, что пока эти самые (как их там по русски-то?) экспрессионс для меня еще темный лес.
Ты же cам все озвучил вроде.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, DarthSidius, Вы писали:
DS>Да я непротив посильной помощи. Что там надо сделать? С учетом того, что пока эти самые (как их там по русски-то?) экспрессионс для меня еще темный лес.
Только когда будешь переименовывать, сделай алиасы в старых пространствах имен со старыми именами (через директиву type)... для обратной совместимости.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, DarthSidius, Вы писали:
DS>В том то и проблема, что документации для простых смертных — без слез не взглянешь.
Тут проблема в том, что документацию для простых смертных должны писать такие же простые смертные разобравшиеся в проблеме. Иначе получается скучно и не по делу.
Вот разберись и черкни пару слов. Следующему будет проще.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.