Присвоение в сложной структуре

Предыдущая тема Следующая тема Перейти вниз

Присвоение в сложной структуре

Сообщение  Gena в Вс Авг 30, 2009 10:08 am

Подскажите, пожалуйста, как в
Код:

Type v3
  As Double x,y,z
End Type

Dim H as v3
H.x=1:H.y=55:H.z=0.547
не использовать "H.x=1:H.y=55:H.z=0.547", а что-то типа H={1,55,0.547} (не работает) Question

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 23
Откуда : Москва

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Присвоение в сложной структуре

Сообщение  DiG. GeRR в Вс Авг 30, 2009 1:33 pm

H = type(1, 55, 43.44)
или
H = type<v3>(1, 55, 43.44)

DiG. GeRR

Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 25
Откуда : Рудный, Казахстан

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Присвоение в сложной структуре

Сообщение  Eric-S в Вс Авг 30, 2009 4:13 pm

Угловые скобочки?.. А это ещё что за хрень?

Так же можно использовать конструкцию

[/code]
with h1
.x = 1
.x = 6
.z = 0
end with
[/code]

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Присвоение в сложной структуре

Сообщение  DiG. GeRR в Вс Авг 30, 2009 4:59 pm

Угловые скобочки?.. А это ещё что за хрень?

Та самая! http://www.freebasic.net/wiki/wikka.php?wakka=KeyPgTypeTemp И главное, отлично работающая!

А With - разве это короче?

DiG. GeRR

Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 25
Откуда : Рудный, Казахстан

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Присвоение в сложной структуре

Сообщение  Eric-S в Вс Авг 30, 2009 5:28 pm

DiG. GeRR пишет:
А With - разве это короче?

В данном случае действительно без разници.
Но Когда структура большая. А её имя длинное или составное, то with ещё как сокращает код.
Ну а свойства или методы по именам всё же удобнее, чем по их позиции.

Пытался в C++ найти похожее, но не нашол.
Некоторые критикуют, мол вносит неясность, но если аккуратно, то мне очень даже нравиться.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Присвоение в сложной структуре

Сообщение  DiG. GeRR в Вс Авг 30, 2009 8:03 pm

и все же это ближе к
что-то типа H={1,55,0.547}
Smile

DiG. GeRR

Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 25
Откуда : Рудный, Казахстан

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Присвоение в сложной структуре

Сообщение  Gena в Вс Авг 30, 2009 9:36 pm

Спасибо, работает ! Smile

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 23
Откуда : Москва

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Присвоение в сложной структуре

Сообщение  electrik в Пн Авг 31, 2009 2:53 am

очень красивый ход. причем в ассемблере не отличается, тоесть две записи в асм коде будут одинаковы.
test.x=123
test.y=21
test=type(123,21)
а вот with, я не люблю. во FreeBasic, with построен так. берется адрес начала типа, пишется значение по этому адресу, для следующего элемента, берется адрес начала типа+размер элемента типа, и пишется туда и так далее.
вот два кода на Freebasic и ассемблере.

Код:

type a
x as integer
y as integer
end type

dim test as a
test.x=1
test.y=21

test=type(1,21)

with test
.x=1
.y=21
end with


код на асме

Код:

mov dword ptr [ebp-12], 1 ; test.x=1
mov dword ptr [ebp-8], 21 ; test.y=21

;запись типа test=type(1,21)
mov dword ptr [ebp-12], 1
mov dword ptr [ebp-8], 21

; здесь начинается with test
lea eax, [ebp-12] ; получим адрес начала типа
mov dword ptr [ebp-24], eax ' сохраним этот адрес в переменной
mov eax, dword ptr [ebp-24] ; зачем-то его прогрузим в eax
mov dword ptr [eax], 1 ; запишем по адресу test.x значение 1
mov eax, dword ptr [ebp-24] ' прочитаем адрес начала типа из переменной
mov dword ptr [eax+4], 21 ; запишем по адресу test.y значение 21

вот так. конечноже тут есть своя тема с постоянным получением адреса. могут написать так:
with test
.x=1
print .x
вот именно другие функции могут изменить регистр eax, поэтому приходиться для каждого элемента получать начальный адрес.
если помудрить с синтаксическим анализатором, этого можно избежать. если между элементами вставляется какая-нибудь функция, адрес получать, если же идет все подряд типа
.x=1
.y=21
тогда достаточно работать с eax.
а вообще лучше всего, обрабатывать with так, как будто мы написали напрямую
test.x=1

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Присвоение в сложной структуре

Сообщение  Eric-S в Пн Авг 31, 2009 3:20 am

С with не всё так просто.
Хотя наверное стоит поковыряться с ним по ближе в компилере.
Только это не в лексическом анализаторе, а уже в построителе кода.

Лексический анализатор всего лишь выбирает лексемы. Т.е. слова, комментарии, пробелы, цифры и строки в кавычках.

Что же касаеться with. То он расчитывался для более гружоных вещей. Например


Код:

type coord
x as integer
y as integer
z as integer
end type

type base
c as coord
end type


dim base_element as base ptr
base_element = new base()

with base_element->c
.x = 123
.y = 456
.z = 0
end with

Очень бы хотелось посмотреть на такой расклад. Ведь в коде писать такое, это же

Код:

base_element->c.x = 123
base_element->c.y = 456
base_element->c.z = 0

А мне попадались как-то конструкции ещё более накрученные.

document->body->GetElementById("123")->element->attribs->GetAttrib("aaa")

Или что-то такое, но не менее гружоное.
А ведь тут по указателям прыгать туда-сюда...
И что, вот такую прелесть дублировать двадцать раз?

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Присвоение в сложной структуре

Сообщение  electrik в Вт Сен 01, 2009 12:59 am

если писать простую программу, даже с окнами windows, можно и with.
если драйвер, или на асме, или повторяй по 30 раз.
хотя смотря какие окна. если там выводится крутая графика, которой надо чуть не geforce 9800, тогда повторяй. но это так, тупой пример.
да я думаю, что ты и без меня это знаешь. всегда приходится чем-то жертвовать, либо понятным исходником, либо скоростью кода.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Присвоение в сложной структуре

Сообщение  Eric-S в Вт Сен 01, 2009 1:07 am

Вообщем-то да.
Я просто ещё размышляю, как оптимизировать код для своего компилера.
И вот всё что здесь пишеться может быть важным.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Присвоение в сложной структуре

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения