Size: a a a

Scala User Group

2020 July 22

TI

Tolegen Izbassar in Scala User Group
Стрелочный тип в смысле когда аргумент сразу не вычисляется?
источник

S

Simon in Scala User Group
Nikita🌈🦄🌈🇺🇦🇨🇦
привет, я джавист, разбираюсь сейчас с совсем новыми для меня концепциями в скале. Скажите плз, чем принципиально отличается def функция со стрелочным типом от такой же, но с обычным возвращаемым типом и от такой же стрелочной val? и если они действительно +- одно и тоже, то что предпочтитетельнее использовать? Сорри если глупый воспрос, плз не бейте тапками :)
val scalaVal: Int => String 
~=
private final Function[Integer, String] javaVal;
Function[Integer, String] getJavaVal() { return javaVal; }

def scalaDef: Int => String
~=
Function[Integer, String] javaDef();
источник

S

Simon in Scala User Group
@chikitoskin так понятнее?
источник

VR

Valery Ryaboshapko in Scala User Group
Nikita🌈🦄🌈🇺🇦🇨🇦
привет, я джавист, разбираюсь сейчас с совсем новыми для меня концепциями в скале. Скажите плз, чем принципиально отличается def функция со стрелочным типом от такой же, но с обычным возвращаемым типом и от такой же стрелочной val? и если они действительно +- одно и тоже, то что предпочтитетельнее использовать? Сорри если глупый воспрос, плз не бейте тапками :)
Запись A => B — это синтаксический сахар для Function1[A, B]. То есть, это функция, которая принимает один параметр. Функция является полноценным объектом, то есть, её можно положить в val, вернуть в качестве результата функции, или принять как аргумент для другой функции. А дальше уже сам решай, что ты хочешь: возвращать из функции значение или функцию.
источник

S

Simon in Scala User Group
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
Simon
@chikitoskin так понятнее?
да, спасибо , у меня было +- такое же представление, но
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
видел этот тред
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
но там если оставить только val test: () => Int =  util.Random.nextInt
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
она каждый раз возвращает рандом
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
что меня увидило
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
поэтому пошел гуглить дальше, ответа пока не нашел
источник

S

Simon in Scala User Group
Nikita🌈🦄🌈🇺🇦🇨🇦
что меня увидило
val test: () => Int =  util.Random.nextInt

IntSupplier def test() { return () -> threadLocalRandom.nextInt(); }
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
т.е. в данном случае val и def действительно одно и тоже?
источник

S

Simon in Scala User Group
нет
источник

VR

Valery Ryaboshapko in Scala User Group
Nikita🌈🦄🌈🇺🇦🇨🇦
но там если оставить только val test: () => Int =  util.Random.nextInt
Если десахарировать эту запись, получится val test: Function0[Int]. В переменной лежит функция. Функцию можно вызывать. И каждый вызов функции будет генерировать новое значение.
источник

S

Simon in Scala User Group
IntSupplier - аналог () => Int
источник

TI

Tolegen Izbassar in Scala User Group
Представь, что у тебя анонимный класс с функцией создался. Если это val то будет только один инстанс этого класа, но при этом само тело функции при вызове будет перевычисляться
источник

S

Simon in Scala User Group
Nikita🌈🦄🌈🇺🇦🇨🇦
т.е. в данном случае val и def действительно одно и тоже?
моя ошибка
источник

S

Simon in Scala User Group
Nikita🌈🦄🌈🇺🇦🇨🇦
т.е. в данном случае val и def действительно одно и тоже?
вот так правильно:
val test: () => Int =  util.Random.nextInt
final IntSupplier test = () -> threadLocalRandom.nextInt();
источник

TI

Tolegen Izbassar in Scala User Group
Если это def то будет новый инстанс на каждый вызов, и уже у этого инстанса будет функция вычисляться
источник