OberonCore https://forum.oberoncore.ru/ |
|
ОИК "Восход" https://forum.oberoncore.ru/viewtopic.php?f=5&t=5677 |
Страница 4 из 10 |
Автор: | Info21 [ Воскресенье, 08 Май, 2016 20:01 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
prospero78 писал(а): Если считать, что радиан есть величина безразмерная, то технически можно разделить 180 на pi. Даже если и не считать, то 180 разделить на pi=3.14159... можно.Затрудняюсь порекомендовать литературу. Какой-нибудь начальный курс общей физики. |
Автор: | Valery Solovey [ Воскресенье, 08 Май, 2016 21:51 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
prospero78 писал(а): Получим отмасштабированные градусы, но не радианы. Количество полученных градусов будет в точности соответствовать 1 радиану, но от этого они не перестанут быть градусами. Откуда это "отмасштабированные" появилось? Пи - это не коэффициент масштабирования. Градусы не являются производными от радианов, а радианы не являются производными от градусов. Но обе эти сущности зависят от углов (не было бы углов - не потребовались бы единицы их измерения). И если есть произвольный угол, то его можно оценить с помощью любой из этих единиц измерения. Или обеими. И поэтому иногда возникает такая задача: Есть угол и известен его размер в одних единицах. Каков будет его размер в других единицах? Решения у такой задачи простые. Одно из них я привёл в предыдущем посте (надеюсь, нигде не ошибся). И ещё раз: формулы не делают из радиан градусы. Формулы находят соответствие заданному количеству радиан в альтернативной системе. |
Автор: | prospero78 [ Понедельник, 09 Май, 2016 10:08 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
На минуточку. pi -- величина безразмерная! И означает она ДЛИНУ окружности к ДЛИНЕ единичного вектора этой окружности с коэффициентом -- 2*pi. Так что радианы не зависят от градусов, простите подвиньтесь. Они зависят от базовых констант нашего пространства-времени. Цитата: И ещё раз: формулы не делают из радиан градусы. Формулы находят соответствие заданному количеству радиан в альтернативной системе. Да уж тогда скорее радианы -- это альтернативная система градусам. По крайней мере, я понимаю, почему 6.28. И с трудом понимаю, почему pi. Я с трудом понимаю почему градусов 360, а не 100 (привет Вавилону с его 60-ричной системой?) |
Автор: | Kubanych [ Четверг, 12 Май, 2016 21:00 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
prospero78 писал(а): Я с трудом понимаю почему градусов 360, а не 100 (привет Вавилону с его 60-ричной системой?) эта система была введена до калькуляторов. Удобно нацело делить на 2,3,4,5,6,8,9,10,12,15,20,30,40,60. А 100 нацело делится только на 2,4,5,10,20,50. |
Автор: | prospero78 [ Пятница, 13 Май, 2016 12:48 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
Пришлось по работе посидеть под FreePascal. Постоянно ловил себя на мысли, что меня бесит отсутствие пространства имён, и выпадающая подсказка по членам класса нужна именно поэтому. Может, я что-то делаю не так, но передать объект по ссылке в качестве сеттера для property в классе -- НЕЛЬЗЯ!!! И определить статический объект в процедуре в виде класса (и уж тем более инициализировать его) тоже не можно. Сидел, плевался) |
Автор: | Александр Ильин [ Пятница, 13 Май, 2016 12:55 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
prospero78 писал(а): Может, я что-то делаю не так, но передать объект по ссылке в качестве сеттера для property в классе -- НЕЛЬЗЯ!!! Что за кошмар вы там наворотили? Зачем вам оъект в качестве сеттера? Сеттер - это же процедура, а никакой не объект.
|
Автор: | prospero78 [ Пятница, 13 Май, 2016 13:42 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
Совершенно верно. И объявление в форме: Код: PROTECTED _Ua:clsKVw; PROCEDURE _set_Ua(VAR a:clsKVw); PUBLIC PROPERTY Ua:SINGLE read _Ua.val write _set_Ua Вот это во FreePascal сделать невозможно. И упреждающее объявление методов бесит. |
Автор: | Александр Ильин [ Пятница, 13 Май, 2016 13:48 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
Я не понял, почему у вас property имеет тип single, а в сеттер вы хотите передать переменную другого типа? Что за концептуальную кашу вы там пытаетесь завариь? Сделайте просто. Компилятор прав, что не даёт вам устроить нетипизированный балаган. |
Автор: | prospero78 [ Пятница, 13 Май, 2016 13:53 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
Где же не типизированный??? Я же прописал тип аргумента! Затея такая, чтобы не передавать только Ua.val (а там ещё и масштабный коэффициент, достоверность, метка времени обновления и всё-такое). Кучу параметров в сеттере невозможно передать, а передача ссылки на объект просто просится. |
Автор: | Александр Ильин [ Пятница, 13 Май, 2016 13:54 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
prospero78 писал(а): Затея такая, что не передавать Ua.val (а там ещё и масштабный коэффициент, достоверность, метка времени обновления и всё-такое). Ну, так и сделайте property типа clsKVw, в чём проблема?
Кучу параметров в сеттере невозможно передать, а передача ссылки на объект просто просится. |
Автор: | prospero78 [ Пятница, 13 Май, 2016 13:58 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
Так вот в том и проблема, что я хочу получать тип напряжение в киловольтах, а отдавать просто число (например для ГИП). Но в операциях, на присвоение я не хочу получать что попало (амперы или ватты). А именно то, что мне надо. Видимо, придётся ковырять в сторону перегрузки операций. Что не очень хорошо. |
Автор: | prospero78 [ Пятница, 13 Май, 2016 14:00 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
Я вообще не понимаю: ну какая разница компилятору, какого типа аргумент на присвоение?! Связи никакой. |
Автор: | Александр Ильин [ Пятница, 13 Май, 2016 14:07 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
prospero78 писал(а): Так вот в том и проблема, что я хочу получать тип напряжение в киловольтах, а отдавать просто число (например для ГИП). Но в операциях, на присвоение я не хочу получать что попало (амперы или ватты). А именно то, что мне надо. Налицо непонимание смысла языковой конструкции property.Видимо, придётся ковырять в сторону перегрузки операций. Что не очень хорошо. http://wiki.freepascal.org/Property prospero78 писал(а): Я вообще не понимаю: ну какая разница компилятору, какого типа аргумент на присвоение?! Связи никакой. Вы хотите объявить переменную одного типа, а присваивать ей значения другого типа, и не видите проблемы? Вы хотите, чтобы что угодно можно было присвоить чему угодно? С этим в Basic, пожалуйста.
|
Автор: | prospero78 [ Пятница, 13 Май, 2016 14:12 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
Цитата: Налицо непонимание смысла языковой конструкции property. Почитал. Ничего нового не узнал. Именно так я property и понимаю. Цитата: Вы хотите объявить переменную одного типа, а присваивать ей значения другого типа, и не видите проблемы? Вы хотите, чтобы что угодно можно было присвоить чему угодно? С этим в Basic, пожалуйста. В каком месте я пытаюсь присвоить другой тип? Что-то я у себя такого не вижу. |
Автор: | Kemet [ Пятница, 13 Май, 2016 16:05 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
Это язык со строгой статической типизацией. Свойство имеет некий тип, и результат геттера и аргумент сеттера этого свойства должны иметь тот же самый тип. Что здесь непонятного? Если хочется использовать разные типы, нужно реализовать операторы преобразования Implicit/Explicit. ЗЫ: А потом эти люди начинают с придыханием вещать: язык ХХХ полная лажа, а вот Оберон, это да, сила. И люди начинают сомневаться в адекватности любителей оберона. |
Автор: | prospero78 [ Пятница, 13 Май, 2016 16:45 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
Причём тут тип аргумента в процедуре, и результат присваиваемый property????? Кемет, ты опять пишешь не по теме. Я может во write вызов процедуры вообще как чекпоинт использую, без какого-либо присвоения?! Какое дело компилятору, какого типа АРГУМЕНТ я передаю в ПРОЦЕДУРУ?!!! ПРОЦЕДУРА ОНА ВООБЩЕ НИЧЕГО НЕ ВОЗВРАЩАЕТ!!! Кемет, ты молодец, что имеешь что сказать, но такое ощущение складывается, что ты вообще не читаешь вопрос. В КП нет property за ненадобностью. Имхо, это отличное подтверждение такому техническому решению. ================ З. Ы. Я сейчас ради спортивного интереса сделал write через FUNCTION():SINGLE. Один хрен. FreePacal упорно считает, что так делать нельзя. Да это бред. |
Автор: | Александр Ильин [ Пятница, 13 Май, 2016 17:23 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
prospero78 писал(а): сделал write через FUNCTION():SINGLE... Да это бред. Вот так правильно.
|
Автор: | Александр Ильин [ Пятница, 13 Май, 2016 17:44 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
Дать, что ли, азы понимания property вам? По приведённый ранее ссылке из вики есть пример: Код: TCar = class private FColor: string; procedure SetColor(CarColor: string); public property Color: string read FColor write SetColor; end; Все элементы property: его тип, тип, возвращаемый геттером, и тип параметра сеттера должны быть одинаковыми. Геттер и сеттер не должны иметь дополнительных параметров, у них чётко оговоренный формат. Что сделает компилятор? Если у нас есть объект car типа TCar, то при чтении car.Color будет вызван геттер, в данном случае будет подставлено выражение car.FColor. Например, вызов file.Write(car.Color) будет заменён на file.Write(car.FColor). При присвоении значения свойству Color компилятор заменит car.Color := "red" на вызов car.SetColor("red"). Что вы на самом деле будете делать в сеттере, конечно, дело ваше, но компилятор видит, что вы объявили свойство типа string, и при компиляции присваивания этому property проверяет тип присваиваемых значений на соответствие типу property. Поэтому и параметер сеттера должен иметь тот же тип, чтобы при замене присваивания на вызов сеттера типы совпали. В вашем случае у property имеется тип single, а сеттер принимает на вход какой-то левый класс. Компилятор справедливо негодует, точно так же, как он негодовал бы, если бы вы сделали следующее: Код: var
s: single; c: clsKVw; begin s := c; |
Автор: | prospero78 [ Пятница, 13 Май, 2016 18:03 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
Спасибо, Александр за небольшую лекцию. Я прекрасно понимаю, как работает property. Говоря "Это же бред", я имел в виду, что даже через Код: FUNCTION():SINGLE это не работает!!!!!!!!!!!!!!!!! У сеттера через PROCEDURE нет возвращаемого значения, в том и дело! А если сеттер сделан через функцию, то его возвращаемое значение такое же, как у property. Но компилятор и в этом случае отказывается компилировать. КАКОЕ ДЕЛО КОМПИЛЯТОРУ ДО МОИХ АРГУМЕНТОВ??? Ну это же бред!!! |
Автор: | Александр Ильин [ Пятница, 13 Май, 2016 18:16 ] |
Заголовок сообщения: | Re: ОИК "Восход" |
prospero78 писал(а): Я прекрасно понимаю, как работает property. Вы это уже говорили, и статью по ссылке читали, но компилятор с вами не согласен.Ваш код должен выглядеть примерно так: Код: PROTECTED _Ua:clsKVw; PUBLIC PROPERTY Ua:SINGLE read _Ua.val; PROCEDURE SetUa(VAR a:clsKVw); Либо так: Код: PROTECTED _Ua:clsKVw; PROCEDURE _set_Ua(VAR a:clsKVw); PUBLIC PROPERTY Ua:clsKVw read _Ua write _set_Ua; Ну, ещё может быть вот так: Код: PROTECTED
_Ua:clsKVw; PUBLIC PROPERTY Ua:clsKVw read _Ua write _Ua; |
Страница 4 из 10 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |