Yoko

All sides of Injection
It is currently 2025-11-22 23:31:30

All times are UTC+02:00




Post new topic  Reply to topic  [ 7 posts ] 
Author Message
PostPosted: 2010-02-04 09:49:19 
Offline
User avatar

Joined: 2008-08-11 21:52:22
Posts: 30
Хм, а имеется ли возможность создавать указатели на функции, то есть например сделать переменную или массив, элементы которого - сабы моего скрипта, и обращаться, например не
Code:
Walk(x,y)

а, наподобии этого -
Code:
var Function = Walk()
Function(x,y)

Перепробовал много всего, но так и не получилось..


Top
   
PostPosted: 2010-02-04 11:57:44 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
О да, конечно :)
Если что, то это был сарказм.

Вижу два способа это сделать.

Первый. Более эстетично выглядящий, и вероятно подойдёт в 99% случаев:
Code:
sub selectFunction(name,param1,param2,param3)
        if (name == 'funct1') then
                return funct1(param1,param2,param3)
        endif
        if (name == 'funct2') then
                return funct2(param1,param2,param3)
        endif
        if (name == 'funct3') then
                return funct3(param1,param2,param3)
        endif
endsub

sub...
var funct = 'funct1'
selectFunction(funct,1,2,3)
endsub


Второй. Всё работает через задницу, зато позволяет добавлять любое количество функций не изменяя кода:
Code:
Sub func1()
        var param1 = UO.GetGlobal('param1')
        var param2 = UO.GetGlobal('param2')
        var param3 = UO.GetGlobal('param3')
...
endsub

Sub callFunc(name,param1,param2,param3)
        UO.SetGlobal('param1',param1)
        UO.SetGlobal('param2',param2)
        UO.SetGlobal('param3',param3)
        UO.Exec('exec '+name)
endsub

sub...
        var func = 'func1'
        callFunc(func,1,2,3)
endsub


Top
   
PostPosted: 2010-02-04 12:32:31 
Offline
User avatar

Joined: 2008-08-11 21:52:22
Posts: 30
Beyonder wrote:
О да, конечно :)
Если что, то это был сарказм.

Вижу два способа это сделать.

Первый. Более эстетично выглядящий, и вероятно подойдёт в 99% случаев:
Code:
sub selectFunction(name,param1,param2,param3)
        if (name == 'funct1') then
                return funct1(param1,param2,param3)
        endif
        if (name == 'funct2') then
                return funct2(param1,param2,param3)
        endif
        if (name == 'funct3') then
                return funct3(param1,param2,param3)
        endif
endsub

sub...
var funct = 'funct1'
selectFunction(funct,1,2,3)
endsub


Второй. Всё работает через задницу, зато позволяет добавлять любое количество функций не изменяя кода:
Code:
Sub func1()
        var param1 = UO.GetGlobal('param1')
        var param2 = UO.GetGlobal('param2')
        var param3 = UO.GetGlobal('param3')
...
endsub

Sub callFunc(name,param1,param2,param3)
        UO.SetGlobal('param1',param1)
        UO.SetGlobal('param2',param2)
        UO.SetGlobal('param3',param3)
        UO.Exec('exec '+name)
endsub

sub...
        var func = 'func1'
        callFunc(func,1,2,3)
endsub

Ага, спасибо, жаль что нельзя, надо Yoko учесть это в следующем релизе, как и вообще - указатели как таковые..
На данный момент у меня как в первом варианте. :) Но душа не спокойна при виде одинаковых кусков кода, у меня там аж 7 функций :)
Ах да, кстати - эти мои 7 функций - эмуляция работы с глобальными массивами :) Это тоже неплохо бы добавить в следующий релиз (глобальные массивы, то бишь).


Top
   
PostPosted: 2010-02-04 12:42:34 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
Ну в данный момент состояние инжекта таково, что он лежит еще не совсем мёртвый и слегка подрыгивает ножками. Так что не думаю что такие глобальные изменения найдут своего программиста :)


Top
   
PostPosted: 2010-02-04 13:29:09 
Offline
User avatar

Joined: 2008-08-11 21:52:22
Posts: 30
Beyonder wrote:
Ну в данный момент состояние инжекта таково, что он лежит еще не совсем мёртвый и слегка подрыгивает ножками. Так что не думаю что такие глобальные изменения найдут своего программиста :)

:(


Top
   
PostPosted: 2010-02-04 14:37:42 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
МБ я не понял запроса но чем не устраивает:
Code:
sub main()
test(10, 20, 'действие')
endsub
Sub test(1, 2, действие)
for x = 1 to 2
test2('действие')
next
endsub

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
PostPosted: 2010-02-04 14:45:30 
Offline
User avatar

Joined: 2008-08-11 21:52:22
Posts: 30
Mirage wrote:
МБ я не понял запроса но чем не устраивает:
Code:
sub main()
test(10, 20, 'действие')
endsub
Sub test(1, 2, действие)
for x = 1 to 2
test2('действие')
next
endsub

Мне было интересно, можно ли каким-то образом реализовать нечто подобное:

Code:
Sub Func1(index)
   return index+1
end sub

Sub Func2(index)
   return index+2
end sub

Sub Func3(index)
   return index+3
end sub

Sub Func4(index)
   return index+4
end sub

sub Calculate()
   var i
   DIM Function[4]
   Function[0] = Func1()
   Function[1] = Func2()
   Function[2] = Func3()
   Function[3] = Func4()
   for i = 0 to 3
      uo.print(str(Function[i](1)))
   next
end sub


То есть массив указателей на функции, чтобы вызывать их не по именам сабов, а по указателям.. Но, как мне сказали, нельзя :)


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 7 posts ] 

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited