Вверх ↑
Этот топик читают: Гость
Ответов: 1821
Рейтинг: 168
#1: 2011-11-15 23:57:26 ЛС | профиль | цитата
  Доброго времени суток, господа. Хочу представить мини-туториал для новичков по по новому языку генерации кода - RTCG. Туториал, писался по мере моего изучения RTCG, и потому что выучю, то сразу напишу об этом в статье . Пока что есть только три статейки, но думаю это будет хорошо новичкам, которые желают создать свой пакет на новом языке кодогенерации (кстати, я тоже отношусь к им ). Вот, собственно, эти статьи:
  Введение    Основное    Блоки и вывод данных в скрипт
Желаю удачи в изучении
карма: 5

1
Голосовали:CriDos
Ответов: 1841
Рейтинг: 369
#2: 2011-11-16 00:18:54 ЛС | профиль | цитата
sаmakacd, как я понял, всё что у Вас описано, было проверено на практике а не взято из FTCG?
т.к. я тоже недавно выделял время для изучения и обнаружил что кое какие сложные конструкции из FTCG можно теперь заменить на более простые в RTCG.

Так же я у Вас не увидел описание обязательного блока Result, и новых фишках RTCG типа:
block.reg("Result").inc().println('test').println('test2')
                         .println('test3')
и тд.
карма: 1
1
Голосовали:sаmakacd
Ответов: 1821
Рейтинг: 168
#3: 2011-11-16 00:21:10 ЛС | профиль | цитата
CriDos, с памяти вылетело... Завтра допишу.
карма: 5

0
Ответов: 1841
Рейтинг: 369
#4: 2011-11-16 05:25:28 ЛС | профиль | цитата
Блоки писал(а):
Чуть не забыл сказать об ф-ции create модуля Sys Реегистрация блоков проходит в модуле Sys. А для инициализации всех блоков, используем ф-цию create.

Тут Вы чего-то намудрили)
В модуле hiSys.hws не обязательно регистрировать блоки, но желательно, т.к. это удобно.

Блоки писал(а):
А для инициализации всех блоков, используем ф-цию create.

Нет необходимости самому вызывать эти функции (func create(entry) и func destroy(entry))
кодогенератор сам их вызовет.
Dilma писал(а):
// вызывается один раз при загрузки модуля
func create(entry)
// настройка кодогенератора
// создание блоков
// регистрация типов и т.д.
end

// вызывается один раз при выгрузки модуля
func destroy(entry)
// уничтожение блоков
end

------------ Дoбавленo в 04.43:
Одно только я так и не понял.
Как выполнять арифметические операции с полученными свойствами.
println(this.props("Left") + this.props("Top") + 5) - не прокатывает
------------ Дoбавленo в 04.59:
Так-же вот такой вариант ничего не выводит: println(this.props("Top") + 'teststr')
Хотя если поменять местами this.props("Top") и 'teststr' в результате будет: teststr0

------------ Дoбавленo в 05.25:
CriDos писал(а):
Как выполнять арифметические операции с полученными свойствами.

похоже только так...
fvar(Top)
Top=(5+this.props("Top"))
block.reg("Result").println(Top)
карма: 1
1
Голосовали:sаmakacd
Ответов: 1821
Рейтинг: 168
#5: 2011-11-16 17:43:45 ЛС | профиль | цитата
CriDos,
CriDos писал(а):
println(this.props("Left") + this.props("Top") + 5)
Да, действительно не работает... Интерестно почему?
карма: 5

0
Администрация
Ответов: 15295
Рейтинг: 1519
#6: 2011-11-16 19:56:54 ЛС | профиль | цитата
конструкция

#hws
this.props(<property name>)
возвращает объект класса Property, у которого нет перегруженного оператора "+". Поэтому попытка сложить объект и целое число выдает ничто. Правильно делать так:


#hws
trace(this.props("Left").value + 10)
карма: 27
2
Голосовали:CriDos, sаmakacd
Ответов: 1841
Рейтинг: 369
#7: 2011-11-16 20:24:13 ЛС | профиль | цитата
Dilma, а такая конструкция почему выдаёт ничто? (Left=0)

trace(this.props("Left") + 'teststr')
хотя если перед конструкцией возвращения объекта класса Property разместить два апострофа '' то выдаст текст "0teststr".

trace('' + this.props("Left") + 'teststr')
карма: 1
0
Ответов: 1821
Рейтинг: 168
#8: 2011-11-16 20:25:53 ЛС | профиль | цитата
CriDos, просто в первом коде нету .value, а в другом - есть. Думаю здесь двойной апостроф нипричём...
карма: 5

0
Ответов: 1841
Рейтинг: 369
#9: 2011-11-16 20:33:18 ЛС | профиль | цитата
sаmakacd писал(а):
просто в первом коде нету .value

Убрал. Скопипастил нечаянно.
sаmakacd писал(а):
Думаю здесь двойной апостроф нипричём...

всё предварительно проверяется и тестируется)
карма: 1
0
Ответов: 1821
Рейтинг: 168
#10: 2011-11-16 20:35:06 ЛС | профиль | цитата
CriDos, Просто в первом коде, справа this.props("Left") допечатай .value и думаю заработает

#hws
trace(this.props("Left").value + 'teststr')
карма: 5

0
Ответов: 1841
Рейтинг: 369
#11: 2011-11-16 20:39:32 ЛС | профиль | цитата
так же, если поменять местами «this.props("Left")» с «'teststr'» то результатом всё же будет текст: teststr0
пример:

trace('teststr' + this.props("Left"))
карма: 1
0
Ответов: 3349
Рейтинг: 233
#12: 2011-11-16 20:40:38 ЛС | профиль | цитата
sаmakacd, Возможно тип второго аргумента оператора + приводиться к типу первого, т.е. в этой конструкции ' + this.props("Left"),
this.props("Left") приводиться к типу строка, так как строка складывается с обьектом
карма: 1

0
Ответов: 1841
Рейтинг: 369
#13: 2011-11-16 20:41:00 ЛС | профиль | цитата
sаmakacd писал(а):
думаю заработает

не заработает.
результатом будет цифра 0 не текст: 0teststr.
карма: 1
0
Ответов: 1821
Рейтинг: 168
#14: 2011-11-16 20:41:11 ЛС | профиль | цитата
deleted
карма: 5

0
Ответов: 1841
Рейтинг: 369
#15: 2011-11-16 20:46:54 ЛС | профиль | цитата
думаю Ivann прав.
карма: 1
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)