
Evgeniy
26.05.2017
19:58:49
@Dolfik И конструктор, и геттеры будут internal.
Там какая-то мутная история с этими модификаторами для записей.
@Dolfik Возможно, адекватное решение твоей задачи, это internal запись с дополнительными объявленными вручную геттерами.

Roman
26.05.2017
20:22:14
https://youtu.be/wRxO5ky7S8g?t=37m10s Это шикарно. @VagifAbilov спел песнб про тяжелую жизнь созданного актора, эх, жестокая стратегия исправления ошибок работает без эмоций и привязанности.

Google

Roman
26.05.2017
20:33:21

Roman
26.05.2017
20:33:41

Roman
26.05.2017
20:34:45
Нет, пока это слишком слабо, чтобы опенсорсить

Pawel
27.05.2017
05:26:28

Evgeniy
27.05.2017
06:25:42
@EvgenyTornado2016 Привет!

Nikolay
27.05.2017
08:05:55
Баг или фитча?)

Igor
27.05.2017
08:06:48
Похоже ты не правильно сравниваешь с null, надо isNull вроде

Nikolay
27.05.2017
08:08:20
А так?
С isNull то же самое
Тут косяк из-за let value
Если делаю let serializeValue = ... всё ок

Google

Igor
27.05.2017
08:11:31
А так?
А там разве не присваивание?
А вроде понял, тут типа перекрытие внутри if

Nikolay
27.05.2017
08:12:04
Вот и спрашиваю, это баг или фитча)
При этом такой код нормально отображает значение:
let x = "123"
let x =
if isNull(x) then
printf "x is null"
else
printf "x is not null: %O" x

Evgeniy
27.05.2017
08:15:12
@Dolfik Посмотри, во что это компилируется.

Nikolay
27.05.2017
08:16:04

Evgeniy
27.05.2017
08:16:17
Нет. Первоначальный код.
Может с рефлексией какие-то проблемы.
@Dolfik Если ты делаешь имена не перекрывающимися, то все нормально работает?

Nikolay
27.05.2017
08:21:20
Да
Ну т.е. код всегда одинаково отрабатывает
А вот в VS показывает что там якобы null
https://gist.github.com/Dolfik1/2676e77f399b670facb291ed631f64a6
Такое получается

Evgeniy
27.05.2017
08:23:24
Все нормально. Видимо, проблема только с QuickWatch.

Nikolay
27.05.2017
08:23:39
Ну при наведении тоже null

Evgeniy
27.05.2017
08:23:54
Я понял. Но ничего не падает?

Nikolay
27.05.2017
08:24:18
Неа

Evgeniy
27.05.2017
08:24:21
Ты бы проблему словами описывал сначала. :) Я уж подумал, что компилятор что-то неправильно генерирует, и у тебя все падает.

Nikolay
27.05.2017
08:24:36
Я щас проверил, что с value, что с serializeValue получается одинаковый код

Evgeniy
27.05.2017
08:24:49
Ищи минимальный пример, заводи ишшью.

Google

Nikolay
27.05.2017
08:25:02

Evgeniy
27.05.2017
08:25:11
Неа, нифига не понятно.
@Dolfik У меня в Locals отображаются два значения value.
Один null, один нормальный.
При наведении — null.

Nikolay
27.05.2017
08:28:35
Я просто тыкнул пкм по значению и нажал Quick Watch :)

Evgeniy
27.05.2017
08:29:13
@Dolfik Заведешь ишшью?

Nikolay
27.05.2017
08:29:26
Я пытаюсь минимальный пример сделать)
Забавно:
Ок:
let testNull x =
let x =
if isNull(x) then printf "value is null"
else
printf "value is not null"
()
Не ок:
let testNull x =
let x =
if isNull(x) then null
else
null
()

Evgeniy
27.05.2017
08:39:18
Первый тоже не ок.

Nikolay
27.05.2017
08:40:09
А у меня нормально показывает

Evgeniy
27.05.2017
08:40:18
А ты посмотри в let x.

Nikolay
27.05.2017
08:40:41
Да, косяк)
Можно тогда два примера сразу сделать?

Evgeniy
27.05.2017
08:42:00
Да.

Nikolay
27.05.2017
08:43:42
А у тебя Visual F# Tools Nightly?

Evgeniy
27.05.2017
08:45:22
Угу.

Nikolay
27.05.2017
08:47:23
Вечером попробую завести issue

Roman
27.05.2017
09:29:36
А почему баг? Попробуйте x внутри функции простым типом инициализировать. Интом каким-нибудь

Evgeniy
27.05.2017
09:32:07
Roman Проблема в том, что отладчик почему-то плохо различает перекрывающиеся имена в разных скоупах.

Google

Roman
27.05.2017
09:39:35
Это я понимаю. Вопрос в том какое поведение должно считаться корректным.
В какой момент времени правильным сиановится второй x
Попробуй с интом. Если будет 0, тогда это фича. Если null - баг

Evgeniy
27.05.2017
09:43:09
Roman Да, там ноль.

Roman
27.05.2017
09:43:47
Тады это вторая x, которая ещё не инициализирована.

Evgeniy
27.05.2017
09:43:56
Да.
И мне хотелось бы, находясь внутри if-then-else кейсов, видеть то значением value, по которому разветвление идет.

Roman
27.05.2017
09:44:54
Тогда используй другое имя

Admin
ERROR: S client not available

Evgeniy
27.05.2017
09:45:18
Это неспортивно. :)
Было бы круто, если отладчик помог в такой странной ситуации понять, что происходит.
Мало ли, где такой код встетится.
При том, что в Locals я вижу две версии value.

Nikolay
27.05.2017
09:51:01
Это просто ожидаемое поведение, если ты смотришь значение переменной a, то в ней должно отображаться значение, которое в этой переменной находится, а не в какой-то другой
Интересно кстати, в что вскод покажет

Roman
27.05.2017
11:13:24

Igor
27.05.2017
11:30:45

Roman
27.05.2017
11:33:20

Google

Igor
27.05.2017
11:36:07
типа он еще не null, но уже null?
Те есть, есть два локальные “переменные” (видно в locals) с одним именем x и в watch нельзя уточнить какая именно нужна.
По умолчанию он видим берет последнюю объявленную в коде.

Roman
27.05.2017
11:37:08

Nikolay
27.05.2017
11:44:07

Evgeniy
27.05.2017
11:44:52
@Dolfik Я думаю, это общая проблема где-то в FCS.

Nikolay
27.05.2017
11:45:45

Evgeniy
27.05.2017
11:46:42
@Dolfik Репорть в visualfsharp, там разберутся.

Nikolay
27.05.2017
13:57:52
https://github.com/Microsoft/visualfsharp/issues/3141
Чукча не писатель
Посмотрите плиз :3

Летучая
27.05.2017
13:58:59

Nikolay
27.05.2017
14:00:10
Я случайно создал 5 часов назад :D
Хотел просто набросать, чтобы потом вернуться домой исправить и сохранить, но случайно сохранил :D

Evgeniy
27.05.2017
16:53:29
@Dolfik Отлично. Я бы ещё заскриншотил. :)

Nikolay
27.05.2017
16:54:39
Позже постараюсь сделать
Funogram, кстати, можно уже использовать, но на свой страх и риск, ибо могу всё перепилить) Сейчас полностью готовы три метода :D

Evgeniy
27.05.2017
17:02:57
@Dolfik В нугете уже?

Nikolay
27.05.2017
17:03:10
Неа
Из гита только брать

Evgeniy
27.05.2017
17:04:24
@Dolfik Ишшуев запилил, чтобы тебе наконтрибьютили?

Nikolay
27.05.2017
17:05:05
Неа
Я ещё не всё продумал, может быть 100 раз поменяю)