@scala_ru

Страница 586 из 1499
Aleksey
31.03.2017
16:52:01
Тихо и незаметно вышел Королев 0.3.0 с кучей фичей и багфиксов. https://github.com/fomkin/korolev/releases/tag/v0.3.0

Roman
31.03.2017
18:40:51
Ребятки, а можно как-нибудь в Scala разбить val x: Unit = y = 1, на две строки, чтобы объявление x было на первой строке?

Nick
31.03.2017
18:42:38
Поставь фигурные скобки

Google
Roman
31.03.2017
18:45:39
Не, я не так выразился, не в плане технически перенести на вторую строку, а, например, чтобы в можно было в REPL отдельно выполнять.

Grigory
31.03.2017
18:47:00
:paste рeжим мож подойдeт?

Roman
31.03.2017
18:50:03
Давайте еще раз. Как val x: Unit = y = 1 Превратить в val x: Unit var y = 0 x = y = 1

это возможно?

Т.е. как мне объявить x c типом Unit?

Alex
31.03.2017
18:53:41
а как вы собираетесь юниту присвоить инт?

да еще и val

Roman
31.03.2017
18:59:35
Сорри, я только начал читать книгу Scala для нетерпеливых, поэтому не до конце понимаю все

Вопрос из книги

Alex
31.03.2017
19:00:14
val нельзя объявлять и присваивать на разных строках

var только можно

Roman
31.03.2017
19:00:39


Alex
31.03.2017
19:02:30
ну сделайте x тоже var

Google
Mikhail
31.03.2017
19:10:10
Там не хватает другой подсказки крупными буквами - "Никогда так не делайте в реальной жизни"

и восклицательных знаков побольше

Oleksandr
31.03.2017
19:16:56
ну три варианта я придумал, кто больше? (4, если засчитать хак компилятора, но так не интересно)

Roman
31.03.2017
19:19:04
ну сделайте x тоже var
Не работает так

Oleksandr
31.03.2017
19:22:09
Не работает так
как именно не работает?

Roman
31.03.2017
19:23:22
Отвлекся, сорри

#!/usr/bin/env scala var x: Unit var y = 0 x = y = 1

Mikhail
31.03.2017
19:24:01
var x:Unit = Unit

Roman
31.03.2017
19:24:04
вот так не работает

о, вот оно что

Mikhail
31.03.2017
19:24:35
все переменные должны быть инициализированы

Roman
31.03.2017
19:25:49
А почему var x = Unit не работает тогда?

Oleksandr
31.03.2017
19:26:25
Unit это тип, с единственным значением ()

Roman
31.03.2017
19:26:45
error: type mismatch; found : Unit required: Unit.type

Oleksandr
31.03.2017
19:27:06
аналогия: var x = Int x = 2

Alex
31.03.2017
19:27:25
scala> var x: Unit = () x: Unit = () scala> var y = 0 y: Int = 0 scala> x = y = 1 x: Unit = ()

Mikhail
31.03.2017
19:27:29
scala> var x = Unit x: Unit.type = object scala.Unit scala> var y = 0 y: Int = 0 scala> x = y = 2 <console>:13: error: type mismatch; found : Unit required: Unit.type x = y = 2 ^ scala> var x:Unit = Unit x: Unit = () scala> x = y = 2 x: Unit = ()

Oleksandr
31.03.2017
19:28:23
бонусный вопрос — какие ещё 2 (минимум) варианта можно использовать? :)

Mikhail
31.03.2017
19:29:03
макрос, который трансформирует подходящим образом)

Oleksandr
31.03.2017
19:29:14
не, это в категорию хаков компилятора

Google
Oleksandr
31.03.2017
19:29:16
все проще

Mikhail
31.03.2017
19:29:49
варианта для чего? чтобы была валидна запись a = b = value и при этом a != Unit ?

Oleksandr
31.03.2017
19:30:01
ага

Mikhail
31.03.2017
19:30:22
с переопределением = в своем классе и возврат значения

Oleksandr
31.03.2017
19:30:58
а его можно переопределить? оО

Mikhail
31.03.2017
19:31:16
хз, не помню)

в плюсах можно

Oleksandr
31.03.2017
19:32:20
ну вот теперь не будешь спать и думать, какие ещё 2 варианта :)

я скажу, что a == 1 вернет true, в качестве подсказки)

и ещё одна подсказка — это так только в одном из этих вариантов

Roman
31.03.2017
19:35:02
Что-то я все равно не могу понять

в Scala тип не обязательно же объявлять

Oleksandr
31.03.2017
19:35:36
точнее немного — "a == 1 — true" — валидный сценарий до этого "a = b = value"

в Scala тип не обязательно же объявлять
да, иногда компилятор способен его вывести

в Scala тип не обязательно же объявлять
у типа Int есть, грубо говоря, 2^64 значений у типа Unit есть ровно одно

Aleksey
31.03.2017
19:37:54
Как-то на собеседование пришел один дядька, который был уверен, что Scala это динамически типизированный язык, потому что типы объявлять не надо. Говорит, мол надоело на джаве писать, хочется что-нибудь динамическое, типа груви или скалы.

Roman
31.03.2017
19:38:10
:)

Vadim
31.03.2017
19:38:46
@dveim я не втыкаю на какой вариант ты намекаешь)

Mikhail
31.03.2017
19:38:55
точнее немного — "a == 1 — true" — валидный сценарий до этого "a = b = value"
эм. речь изначально идет о a = b = value - нельзя менять. иначе отклонение от правил. как поможет a == 1 ?

Oleksandr
31.03.2017
19:39:00
var x: AnyVal = 1 (x таки == 1)

Google
Oleksandr
31.03.2017
19:39:13
и var x: Any = new Object, например

Vadim
31.03.2017
19:40:47
я все равно не понял)

Roman
31.03.2017
19:41:14
Я тоже вот это не понял

scala> var x: Unit = Unit x: Unit = () scala> var x = Unit x: Unit.type = object scala.UnitЕсли разница лишь в том, что мы указываем тип явно

Oleksandr
31.03.2017
19:41:28
scala> var x: AnyVal = 1 x: AnyVal = 1 scala> x == 1 res2: Boolean = true scala> var y = 666 y: Int = 666 scala> x = y = 42 x: AnyVal = ()

Vadim
31.03.2017
19:41:36
implicit def с Unit кстати подходит

Mikhail
31.03.2017
19:42:19
так х == 1 тут не при чем же) Тут AnyVal & Any - вместо Unit - понятно почему прокатывают)

Admin
ERROR: S client not available

Oleksandr
31.03.2017
19:42:46
scala> var x: Unit = Unit x: Unit = () scala> var x = Unit x: Unit.type = object scala.UnitЕсли разница лишь в том, что мы указываем тип явно
кстати хороший поинт я вот не знаю, почему первая строчка компилируется

могу предположить, что у Unit toString возвращает ()

не, нифига

scala> var x: Unit = Unit x: Unit = () scala> var x = Unit x: Unit.type = object scala.UnitЕсли разница лишь в том, что мы указываем тип явно
ага ну дело в том, что каст обьекта типа Unit.type к типу Unit зашит в компиляторе, лол хз зачем, на это полагаться (в своем коде) точно не надо

хотя это тоже как-то не всегда правда если кто расскажет, почему "val a: Unit = Unit" компилится, буду благодарен

Oleksandr
31.03.2017
20:01:47
аааа

все, дошло, спасибо

Mikhail
31.03.2017
20:02:04
object Unit extends AnyValCompanion equal object OtherObject equal new Object ))

семантически конечно) потому что есть в сорцах экземпляр Unit

Google
Oleksandr
31.03.2017
20:03:23
проверки для: хотя Unit и имеет тип Unit.type, явно указывая тип переменной : Unit, мы даем команду игнорить любой результат, и туда неявно дописывается ()

Mikhail
31.03.2017
20:04:06
примитивы не катят var x:Unit = 5 // fail

Oleksandr
31.03.2017
20:04:06
var x: Unit = Unit ==> var x: Unt = { Unit; () }

scala> val a: Unit = 5 <console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses val a: Unit = 5 ^ a: Unit = ()

вроде работает

Mikhail
31.03.2017
20:05:22
а, там варнинг) у меня стрикт просто везде)

Oleksandr
31.03.2017
20:05:52
ну мы углубились в такие дебри, что скала через шаг плюется ворнингом)

Mikhail
31.03.2017
20:06:59
без варнингов)

Oleksandr
31.03.2017
20:08:01
ну, теоретически, обьявление переменной дешугарится в большую кучку кода, и там может что угодно быть

так что тут ок

хорошо, что я не провожу собеседования, иначе бы не удержался от вопросов на эту тему)

Mikhail
31.03.2017
20:08:42
ну это да, просто очередной изврат для обхода примитивных проверок)

Nick
31.03.2017
20:08:51
каких вопросов?

Oleksandr
31.03.2017
20:09:24
каких вопросов?
почему компилится "val a: Unit = Unit", см. выше)

Nick
31.03.2017
20:10:22
потому что Unit эт обычный класс?

Oleksandr
31.03.2017
20:10:28
неа

Nick
31.03.2017
20:10:58
что значит неа

в package scala посмотри)

Oleksandr
31.03.2017
20:11:18
ну то и значит это неправильный ответ на вопрос

и он не совсем обычный, у него специальный treatment в компиляторе

Страница 586 из 1499