Мы все еще теряем контекст в некоторых монадах с Полугруппой?

Третий матч в google для «C ++ slicing» дает мне эту статью в Википедии http://en.wikipedia.org/wiki/Object_slicing и этот (нагретый, но первые несколько сообщений определяют проблему ): http://bytes.com/forum/thread163565.html

Таким образом, это когда вы назначаете объект подкласса суперклассу. Суперкласс ничего не знает о дополнительной информации в подклассе и не имеет места для его хранения, поэтому дополнительная информация получает «отрезанный».

Если эти ссылки не дают достаточной информации для «хороший ответ», пожалуйста, отредактируйте свой вопрос, чтобы сообщить нам, что еще вы ищете.

0
задан faoxis 24 March 2019 в 12:13
поделиться

1 ответ

Await.result убирает Future, а не product, поэтому ваши ожидания соответствуют реальному поведению здесь. Он говорит, что некоторые люди могут ожидать последовательного выполнения вместо параллельного, из-за того, как ведут себя другие полугруппы, но он выбрал плохой пример кода, потому что результат его примера одинаков, независимо от того, выполняется ли он параллельно или последовательно. Лучшим примером, иллюстрирующим точку зрения автора, было бы что-то вроде:

val futurePair = Semigroupal[Future].product(
  Future{Thread.sleep(750); "Hello},
  Future{Thread.sleep(750); 123}
)
Await.result(futurePair, 1.second)

Await.result истекло бы, если бы Futures выполнялся в последовательности.

0
ответ дан Karl Bielefeldt 24 March 2019 в 12:13
поделиться
Другие вопросы по тегам:

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