Size: a a a

2020 March 05

DS

Doge Shibu in rust_offtopic
polunin.ai
если я заменю
foo <- read_line
на
foo = "a"
это будет неравноценно
Так значение read_line - это не "a", а lambda _: read_line_real()
источник

P

Pavel in rust_offtopic
SedSub
Вся суть этого дебильного спрора в том, что люди, которые умеют в ООП так же прекрасно умеют в фпе, но при этом прекрасно осознают его проблемы. Их оппоненты же имеют крайне опосредованное предоставление о ФП и пытаются со своим колхозным пониманием кого-то переспорить.
забыл g, но так даже лучше
источник

p

polunin.ai in rust_offtopic
Doge Shibu
Так значение read_line - это не "a", а lambda _: read_line_real()
так <- read_line вернет строку
источник

λ

λоλторт in rust_offtopic
polunin.ai
так <- read_line вернет строку
Оно вернёт строку завернутую в ио
источник

p

polunin.ai in rust_offtopic
то есть
foo <- bar
это просто сахар над
foo = bar()
источник

λ

λоλторт in rust_offtopic
polunin.ai
то есть
foo <- bar
это просто сахар над
foo = bar()
Нет
источник

P

Pavel in rust_offtopic
Doge Shibu
А делает тем, что теперь вызов каждой функции можно заменить на её значение.

Соответственно рефакторить становится сильно проще, т.к. не нужно включать мозг относительно того, какая функция, что именно внутри себя делает, можно безопасно заменить её вызов на то значение, что она возвращает и т.д.
так я могу так сделать и в ооп
источник

P

Pavel in rust_offtopic
разница будет только в тех случаях, где важен стейт -- локах, например
источник

λ

λоλторт in rust_offtopic
polunin.ai
то есть
foo <- bar
это просто сахар над
foo = bar()
Это сахар над bar.and_then(|foo| { ... })
источник

P

Pavel in rust_offtopic
+ если есть бага в интерпретаторе, то тебе никак её не обойти
источник

p

polunin.ai in rust_offtopic
λоλторт
Это сахар над bar.and_then(|foo| { ... })
ну я разницы не особо вижу
источник

DS

Doge Shibu in rust_offtopic
polunin.ai
так <- read_line вернет строку
Тут надо обьяснить, как <- работают.

Это синтаксический сахар для такого:
class IO[A](...): 
 def bind(self, f: A => IO[B]) -> IO[B]:
    ...

# вот пример сахара:

a <- read_line_io()
return a + "\n"

#вот как оно вне сахара будет выглядить:

read_line_io().bind(lambda a: return a + "\n")
источник

λ

λоλторт in rust_offtopic
Pavel
+ если есть бага в интерпретаторе, то тебе никак её не обойти
Ага, прям как если бага в жвм
источник

DS

Doge Shibu in rust_offtopic
Где bind - это функция композиции определенного рода для наших лямбд
источник

P

Pavel in rust_offtopic
λоλторт
Ага, прям как если бага в жвм
багу в жвм я могу поправить через сайдлоад бажного класса
источник

p

polunin.ai in rust_offtopic
Doge Shibu
Тут надо обьяснить, как <- работают.

Это синтаксический сахар для такого:
class IO[A](...): 
 def bind(self, f: A => IO[B]) -> IO[B]:
    ...

# вот пример сахара:

a <- read_line_io()
return a + "\n"

#вот как оно вне сахара будет выглядить:

read_line_io().bind(lambda a: return a + "\n")
ну и в чем разница то
источник

DS

Doge Shibu in rust_offtopic
Pavel
так я могу так сделать и в ооп
А кто-то спорит?

Я вон, пишу на скале в ООП-ФП стиле, у меня все методы и обьекты ссылочно-прозрачные.
источник

P

Pavel in rust_offtopic
точнее, в стдлибе, не в самой вм
источник

P

Pavel in rust_offtopic
Doge Shibu
А кто-то спорит?

Я вон, пишу на скале в ООП-ФП стиле, у меня все методы и обьекты ссылочно-прозрачные.
ну, просто некоторые это пишут как противопоставление фп-ооп, хотя я вижу только противопоставление к процедурному стилю
источник

DS

Doge Shibu in rust_offtopic
Pavel
ну, просто некоторые это пишут как противопоставление фп-ооп, хотя я вижу только противопоставление к процедурному стилю
Ну они скорее всего имеют в виду процедурное-ОО, которые всё же много где встречается.

Чаще чем ФП-ОО.
источник