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

Nick
31.03.2017
17:32:40

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

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"

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

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 кстати подходит

KrivdaTheTriewe
31.03.2017
19:41:36

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

Admin
ERROR: S client not available

Oleksandr
31.03.2017
19:42:46
могу предположить, что у Unit toString возвращает ()
не, нифига
хотя это тоже как-то не всегда правда
если кто расскажет, почему "val a: Unit = Unit" компилится, буду благодарен

Mikhail
31.03.2017
20:00:59

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

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 в компиляторе