OberonCore https://forum.oberoncore.ru/ |
|
Форма записи операций вывода/ввода https://forum.oberoncore.ru/viewtopic.php?f=27&t=458 |
Страница 1 из 4 |
Автор: | Wlad [ Четверг, 10 Май, 2007 15:11 ] |
Заголовок сообщения: | Форма записи операций вывода/ввода |
Уважаемые коллеги, прельщает ли кого-нить вот, например такая форма записи операций вывода? StdLog.Out.String("result: ").Int(var).String("-th is ").Float(float_value); |
Автор: | Борис Рюмшин [ Четверг, 10 Май, 2007 15:47 ] |
Заголовок сообщения: | |
Не, спасибо. ![]() ![]() |
Автор: | Борис Рюмшин [ Четверг, 10 Май, 2007 16:02 ] |
Заголовок сообщения: | |
Борис Рюмшин писал(а): Не, спасибо.
![]() ![]() Хе-хе... ну да, это смотря как посмотреть... ![]() |
Автор: | Wlad [ Четверг, 10 Май, 2007 16:03 ] |
Заголовок сообщения: | |
Борис Рюмшин писал(а): Не, спасибо. :) Хотя кому-то может и полезно. Тем не менее, это (пока что) недопустимая конструкция. :)
Почему? Определяем общего предка для "потоков", в нём (или в одном из его наследников) - функции вывода для предопределённых типов. Возвращаемое значение - ссылка на this потока... |
Автор: | Борис Рюмшин [ Четверг, 10 Май, 2007 16:04 ] |
Заголовок сообщения: | |
Wlad писал(а): Борис Рюмшин писал(а): Не, спасибо. ![]() ![]() Почему? Определяем общий наследник для "потока", в нём (или в одном из его наследников) - функции вывода для предопределённых типов. Возвращаемое значение - ссылка на this потока... Не, я уже понял ![]() |
Автор: | Wlad [ Четверг, 10 Май, 2007 16:06 ] |
Заголовок сообщения: | |
Борис Рюмшин писал(а): Не, я уже понял
![]() ... и перегрузка операций... ![]() StdLog.log & "result: " & var & "-th is " & float_value; |
Автор: | Евгений Темиргалеев [ Четверг, 10 Май, 2007 16:07 ] |
Заголовок сообщения: | |
Ага, если переписать StdLog, то получим вывод как в C++: Код: (((std::cout.operator << ("a = ")).operator <<(a)).operator <<("b = ")).operator <<(b);
// или std::cout << "a = " << a << "b = " << b; Исли потрясти всех наших студентов, которые используют последнее, то из них врят ли сыщется 10, которые смогут записать первое. ИМХО, нам такая запись не нужна, дабы не нарушать принципа чистоты функций. Хотя без сомнения, она более краткая. |
Автор: | Wlad [ Четверг, 10 Май, 2007 16:11 ] |
Заголовок сообщения: | |
Евгений Темиргалеев писал(а): Хотя без сомнения, она более краткая.
Я там выше добавил... |
Автор: | Евгений Темиргалеев [ Четверг, 10 Май, 2007 16:13 ] |
Заголовок сообщения: | |
Wlad писал(а): Борис Рюмшин писал(а): Не, я уже понял ![]() ... и перегрузка операций... ![]() StdLog.log & "result: " & var & "-th is " & float_value; Эта штука не будет работать, так как в КП нет "оператора-выражения", который бы позволил что-то вычислить и выкинуть вычисленное на помойку. Поэтому только так: Код: out := StdLog.log & "result: " & var & "-th is " & float_value; И то, в том случае, если бы мы могли перегрузить & для "StdLog.Out". Так что в инфиксной форме записать не получиться вообще.
|
Автор: | Wlad [ Четверг, 10 Май, 2007 16:22 ] |
Заголовок сообщения: | |
Евгений Темиргалеев писал(а): Так что в инфиксной форме записать не получиться вообще.
Я - не про "выйдет-не выйдет", я - про "нравится-не нравится" спрашивал... "Красивый самолёт хорошо летает"... |
Автор: | Trurl [ Четверг, 10 Май, 2007 16:34 ] |
Заголовок сообщения: | |
Мне не нравицца. |
Автор: | Wlad [ Четверг, 10 Май, 2007 16:40 ] |
Заголовок сообщения: | |
Trurl писал(а): Мне не нравицца.
Ну на нет - и суда нет! :о) "... - А что, отец, в вашем городе невесты есть? - А кому и кобыла - невеста... - Вопросов не имею... " :о) (с) О.Бендер |
Автор: | Евгений Темиргалеев [ Четверг, 10 Май, 2007 17:18 ] |
Заголовок сообщения: | Re: Форма записи операций вывода/ввода |
Wlad писал(а): Уважаемые коллеги, прельщает ли кого-нить вот, например такая форма записи операций вывода?
StdLog.Out.String("result: ").Int(var).String("-th is ").Float(float_value); Сказывается долгое программирование на C++. Мы упустили, что и этот вариант может быть записан только так: Код: out := StdLog.Out.String("result: ").Int(var).String("-th is ").Float(float_value);
//или StdLog.Write(StdLog.Out.String("result: ").Int(var).String("-th is ").Float(float_value)); // StdLog.Write - процедура |
Автор: | Илья Ермаков [ Четверг, 10 Май, 2007 17:32 ] |
Заголовок сообщения: | |
А еще есть вариант: StdLog.Print("$result: $var-th is $float_value"); Не хотите? ![]() А что, через раскрутку локального контекста реализовать проще пареной репы... Для отладки может быть полезно ![]() |
Автор: | Wlad [ Четверг, 10 Май, 2007 17:35 ] |
Заголовок сообщения: | |
Илья Ермаков писал(а): А еще есть вариант:
StdLog.Print("$result: $var-th is $float_value"); Не хотите? :-) ХОТИМ!!! |
Автор: | Wlad [ Четверг, 10 Май, 2007 17:37 ] |
Заголовок сообщения: | Re: Форма записи операций вывода/ввода |
Евгений Темиргалеев писал(а): Wlad писал(а): Уважаемые коллеги, прельщает ли кого-нить вот, например такая форма записи операций вывода? StdLog.Out.String("result: ").Int(var).String("-th is ").Float(float_value); Сказывается долгое программирование на C++. Мы упустили, что и этот вариант может быть записан только так: Код: out := StdLog.Out.String("result: ").Int(var).String("-th is ").Float(float_value); //или StdLog.Write(StdLog.Out.String("result: ").Int(var).String("-th is ").Float(float_value)); // StdLog.Write - процедура Шо вы мене говорите? Зачем вам явно во втором варианте вызыват Write, когда вы можете методы объекта объявить (String, Int, Float и т.д.), которые и будут к Write обращаться? |
Автор: | Борис Рюмшин [ Четверг, 10 Май, 2007 18:45 ] |
Заголовок сообщения: | |
Wlad писал(а): Илья Ермаков писал(а): А еще есть вариант: StdLog.Print("$result: $var-th is $float_value"); Не хотите? ![]() ХОТИМ!!! Вы поосторожнее, а то он и правда щаз навояет такую байду... ![]() |
Автор: | Wlad [ Четверг, 10 Май, 2007 21:27 ] |
Заголовок сообщения: | |
Борис Рюмшин писал(а): Вы поосторожнее, а то он и правда щаз навояет такую байду... :lol:
А и хорошо! Упражнение для умища! Мне только предупредить хотелось бы, что символ американского рубля нам, сам по себе, ещё может понадобиться для отображения... :о) |
Автор: | Евгений Темиргалеев [ Четверг, 10 Май, 2007 22:46 ] |
Заголовок сообщения: | Re: Форма записи операций вывода/ввода |
Wlad писал(а): ... Я имел в виду вызов ПРОЦЕДУРЫ Write или любой другой - имя значение не имеет, вызов которой (в отличие от ПРОЦЕДУРЫ-ФУНКЦИИ) может быть записан в виде оператора КП. Назначение этой процедуры - проглотить значение ПРОЦЕДУРЫ-ФУНКЦИИ StdLog.Out.String("").... и ничего с ним не делать. Такой вариант и компилироваться будет, и работать так, как предполагалось без него.
Зачем вам явно во втором варианте вызыват Write, когда вы можете методы объекта объявить (String, Int, Float и т.д.), которые и будут к Write обращаться? |
Автор: | Илья Ермаков [ Четверг, 10 Май, 2007 22:48 ] |
Заголовок сообщения: | |
Борис Рюмшин писал(а): Wlad писал(а): Илья Ермаков писал(а): А еще есть вариант: StdLog.Print("$result: $var-th is $float_value"); Не хотите? ![]() ХОТИМ!!! Вы поосторожнее, а то он и правда щаз навояет такую байду... ![]() А что ее ваять... Вон наполовину сваяна уже: viewtopic.php?t=404 |
Страница 1 из 4 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |