|
17.05.2009, 08:37
|
#1
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений (для 6,853 пользователей)
|
TMethod?
Можно ли в BlitzMax передавать в тип функцию или метод?
Образный код:
Type TAssa
Field Draw:TMethod
Field oppa:Int
Method Preved()
'...work in progress
EndMethod
EndType
assa:TAssa=New TAssa
assa.Draw=SuperPuperDraw()
Repeat
assa.Preved()
assa.Draw()
Forever
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
17.05.2009, 12:42
|
#2
|
|
Ответ: TMethod?
может тебе нужно наследование ? потому что то что ты хочешь почти не применяется в ООП
Type TDrawObject
Method Draw() Abstract
EndType
Type TAssa Extends TDrawObject
Method Draw()
' special draw code
EndMethod
EndType
таким же способом если описать Draw у TDrawObject то его можно вызывать из Draw в TAssa
|
|
|
18.05.2009, 11:14
|
#3
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: TMethod?
можно сделать поле как указатель на функцию. А вообще непойму как ты хочешь метод использовать без объекта?
|
(Offline)
|
|
20.05.2009, 23:55
|
#4
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений (для 6,853 пользователей)
|
Ответ: TMethod?
2 Jimon : не, через наследование я не хотел делать.
На самом деле меня просто привлёк тип TMethod
2 dimanche13 : Да допустим Java ADA или PHP поддерживают передачу функции откуда угодно в тип (даже через функцию).
Чтото типа:
function assa(p1,p2)
{
return p1+p2;
};
Tassa.Create(1,2,3,function assa(p1,p2), true)
Или
Tassa.Create(1,2,3,function (p1,p2){
return p1+p2;
}, true)
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
21.05.2009, 11:23
|
#5
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: TMethod?
вообще-то метод- это функция в типе, просто ее первый параметр сам объект(self).
|
(Offline)
|
|
21.05.2009, 18:09
|
#6
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений (для 6,853 пользователей)
|
Ответ: TMethod?
вообще-то метод- это функция в типе, просто ее первый параметр сам объект(self).
|
Не понял ход мысли...
Это и так понятно, но я говорю не про то. Я имел в виду транспортировку функции или метода как обьекта.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
21.05.2009, 21:31
|
#7
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: TMethod?
объясни на пальцах что тебе надо сделать.
|
(Offline)
|
|
22.05.2009, 08:53
|
#8
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений (для 6,853 пользователей)
|
Ответ: TMethod?
На самом деле мне было просто интересно что за тип TMethod.
Вот я и подумал неужели в BlitzMax можно создавать функции-кочевники.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
22.05.2009, 13:13
|
#9
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: TMethod?
TMethod это один из элементов "отражения"(reflection). Он служит для того чтобы можно было узнать по объекту, какими методами он обладает и какие параметры эти методы принимают. Так же возможен вызов этих методов.
на счет функций кочевников можно сказать одно. Без проблем делается массив функций в типе и ты эти функции можешь инициализировать из вне.
|
(Offline)
|
|
24.05.2009, 22:33
|
#10
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений (для 6,853 пользователей)
|
Ответ: TMethod?
массив функций в типе...
Можно больше деталей? Это любопытно.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
24.05.2009, 22:58
|
#11
|
|
Ответ: TMethod?
ну вот к примеру указатель на функцию
Method AddFunction(func:Int(ls:Byte Ptr), name:String)
If (m_started)
lua_register(m_lua_state, name, func)
End If
End Method
|
|
|
24.05.2009, 23:24
|
#12
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: TMethod?
Сообщение от Randomize
массив функций в типе...
Можно больше деталей? Это любопытно.
|
ну очень просто.
пример собран на коленке, не проверял.
SuperStrict
Type myType
Field callback()[]
Method add_function( num:Int, func() )
If( callback.length - 1 < num ) Then
callback = callback[ .. num + 1]
End If
callback[ num ] = func
End Method
Method run_all()
For Local func() = EachIn callback
func()
Next
End Method
End Type
Function func_1()
Print "func_1"
End Function
Function func_2()
Print "func_2"
End Function
Function func_3()
Print "func_3"
End Function
Local bugoga:myType = New myType
bugoga.add_function( 0 , func_1 )
bugoga.add_function( 1 , func_2 )
bugoga.add_function( 2 , func_3 )
bugoga.add_function( 3 , func_1 )
bugoga.run_all() ' пройдемся по всем функциям
end
блин поставил намедни 1.33 рс5 и перестала документация компилиться, а потом и всё перестало компилиться. Жалуется на шквал. Но я его блин даже не юзал никогда, тока проверял враппер. Может скажет кто как починить? Я уже на 1.30 откатился - та же фигня...
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
26.05.2009, 06:07
|
#13
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений (для 6,853 пользователей)
|
Ответ: TMethod?
dimanche13, спасибо большое! Именно это мне и было интересно.
Косательно твоей проблемы:
я использую версию 1.30, такой же глюк был. Помогло лишь тотальное удаление папки BlitzMax с корнем и последующая переустановка.
После систематических вылетов, глюков и лагов BlitzMax выяснил, что это происходит изза наличия вирусов на машине. После глубокого скана, переустановки ОС и повторного полного скана больше таких глюков не замечал. Проверь, может вирусы.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
26.05.2009, 11:59
|
#14
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: TMethod?
Переставил ОСь - все по прежнему, вирусов -нет 99%. Осталось вариант с полным удалением попробовать...
|
(Offline)
|
|
26.05.2009, 12:02
|
#15
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: TMethod?
К сожалению перестановка оси не избавляет от вирусов.
От них спасает форматирование дисков и запись только проверенных файлов и программ. Или банально использовать любой антивирус хотя бы в триальном режиме
__________________
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:20.
|