Информация об изменениях

Сообщение Re: { } от 27.10.2023 2:06

Изменено 27.10.2023 2:18 Разраб

Re: { }
Здравствуйте, BlackEric, Вы писали:

BE>Я сейчас глупость спрошу, но зачем в коде


BE>
BE>if (stage() is { } stages)
BE>

BE>{ }, что они означают?

Кто ж его знает. может ссылочный тип?
ЯП со сложным синтаксисом склонны к деградации, например F#
let xs = [1;2;3]
(* было *)
let x = xs.[0] // => 1
(* стало *)
let x = xs [0] // => 1
let x = xs[0] // => ошибка

иногда нужно остановится. например как сделали в схеме. просто сказали скобочек достаточно.
При это интересно следующее (это же тот же дотнет):
> let xs:List<Stage> = null;;
val xs : List<Stage> = null

> let r = match xs with | :? List<Stage> as x -> x.GetType().ToString() | _ -> "noname";;

  let r = match xs with | :? List<Stage> as x -> x.GetType().ToString() | _ -> "noname";;
  ------------------------^^^^^^^^^^^^^^

stdin(15,25): warning FS0067: Данная проверка типа или понижение будет всегда сохраняться

val r : string = "noname"

не пошел в первую ветку, хотя тип был жеско задан.

Может быть кондишины должны оставаться простыми? типа true/(false or nil).
А уже для специализации использовать полиморфизм?
Было же прекрасно в C# 1
https://rsdn.org/article/dotnet/asis.xml
Автор(ы): Владислав Чистяков (VladD2)
Дата: 18.12.2004
Работая над открытыми проектами, автор заметил, что операторы as и is многими программистами зачастую используются ненадлежащим образом. Результатом очередного двухчасового поиска ошибки и стала эта статья.


Re: { }
Здравствуйте, BlackEric, Вы писали:

BE>Я сейчас глупость спрошу, но зачем в коде


BE>
BE>if (stage() is { } stages)
BE>

BE>{ }, что они означают?

Кто ж его знает. может ссылочный тип?
ЯП со сложным синтаксисом склонны к деградации, например F#
let xs = [1;2;3]
(* было *)
let x = xs.[0] // => 1
(* стало *)
let x = xs[0] // => 1
let x = xs [0] // =>  error FS3217: Это значение не является функцией, и применить его невозможно. Вы хотели обратиться к индексатору с помощью "xs[index]"?

иногда нужно остановится. например как сделали в схеме. просто сказали скобочек достаточно.
При это интересно следующее (это же тот же дотнет):
> let xs:List<Stage> = null;;
val xs : List<Stage> = null

> let r = match xs with | :? List<Stage> as x -> x.GetType().ToString() | _ -> "noname";;

  let r = match xs with | :? List<Stage> as x -> x.GetType().ToString() | _ -> "noname";;
  ------------------------^^^^^^^^^^^^^^

stdin(15,25): warning FS0067: Данная проверка типа или понижение будет всегда сохраняться

val r : string = "noname"

не пошел в первую ветку, хотя тип был жеско задан.

Может быть кондишины должны оставаться простыми? типа true/(false or nil).
А уже для специализации использовать полиморфизм?
Было же прекрасно в C# 1
https://rsdn.org/article/dotnet/asis.xml
Автор(ы): Владислав Чистяков (VladD2)
Дата: 18.12.2004
Работая над открытыми проектами, автор заметил, что операторы as и is многими программистами зачастую используются ненадлежащим образом. Результатом очередного двухчасового поиска ошибки и стала эта статья.