|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.06.2018, 14:35 | #1 |
Новичок
Джуниор
Регистрация: 21.06.2018
Сообщений: 2
|
Странное выражение, два =
Всем привет!
Тут ковырял чужой код и обратил внимание на следующее: Thread.CurrentPrincipal = HttpContext.Current.User = principal; Меня объекты не интересуют. Как понимать два знака равно? |
21.06.2018, 15:07 | #2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Верно замечено, что "=" это выражение (expression), а не инструкция (statement).
И как и все выражения оно что-то возвращает... Код:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
21.06.2018, 15:17 | #3 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
В JS оператор "=" присваивает правой части значение левой части (описка: наоборот, конечно же) (в случае элементарных типов) и возвращает значение левой части. Этот оператор правоассоциативен, то есть, выполняется справа налево, то есть, если таких операторов несколько, выполнение будет происходить начиная с самого правого.
В выражении Код:
Код:
Код:
Последний раз редактировалось Вадим Мошев; 21.06.2018 в 20:42. |
21.06.2018, 15:34 | #4 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
да ну?
42 = a? да причем тут типы? a = (b * 2); a = b++; a = ++b; a = f(f2(b)); не вызывает же вопросов, вот и с выражением = так же. И да, в JS кстати может показаться, что Код:
Код:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 21.06.2018 в 15:41. |
21.06.2018, 16:00 | #5 |
Новичок
Джуниор
Регистрация: 21.06.2018
Сообщений: 2
|
|
21.06.2018, 16:30 | #6 | |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
А так разве можно делать? Я вообще-то подразумевал, что слева должна стоять переменная.
Я имел в виду, что если речь идёт об объектах, то присваивается не значение, а ссылка, так как передача объектов происходит по ссылке, а не по значению. Цитата:
Код:
Я понимаю, согласно тому, как работает оператор присваивания, это будет эквивалентно Код:
|
|
21.06.2018, 16:38 | #7 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
ну так я и говорю, что не левая правой.
разница в var/области видимости. Инструкция (statement) создания переменной с var выглядит примерно так: "var" IDENTIFIER ["=" expression] поэтому второму var неоткуда взяться (в expression'ах его нет). В C#, С++ и т.п. такой проблемы естественно нет потому что там нельзя случайно создать переменную так.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 21.06.2018 в 16:43. |
21.06.2018, 16:53 | #8 | |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Я просто опечатался. Перепутал "лево" и "право" местами.
Цитата:
Тем не менее, согласно тому, как работает в консоли выражение Код:
|
|
21.06.2018, 17:08 | #9 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Код:
Код:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 21.06.2018 в 17:21. |
21.06.2018, 17:40 | #10 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Я вообще подразумевал, что операции происходят в одной области видимости. Я считаю, что неявного объявления переменных (как здесь произошло) следует избегать, так как это приведёт к созданию глобальных переменных или затиранию существующего в данной области видимости значения этой переменной.
Да, про эквивалентность я был не прав. В данном случае, переменная a будет локальной для функции, и за её пределами будет не видна. Для определения переменной b не было инструкции var, это и есть неявное определение переменной. Такая переменная, как я говорил, будет определена глобально. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Pascal. Арифметическое выражение. Решить квадратное уравнение и посчитать выражение, используя вычисленные корни. | dauletsergazin | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 13.11.2017 11:55 |
Два листа - два события, одновременность срабатывания двух макросов | strannick | Microsoft Office Excel | 20 | 03.04.2012 16:49 |
Два одномерных массива A и B. Сформировать два новых массива. Паскаль. Где ошибка в коде? | Tomny | Помощь студентам | 1 | 27.03.2011 16:47 |
Че-то странное .... | ~Brilliant~ | Безопасность, Шифрование | 9 | 27.04.2009 13:57 |
два TMediaPlayer и два AVI-файла | zeleniy | Компоненты Delphi | 0 | 01.06.2007 14:14 |