1 (изменено: yalanne, 2016-01-16 14:24:08)

Тема: AHK: Отслеживание события установки значения массива

Есть такая функция:
Эта функция отслеживает установку новой переменной внутри object, но проблема в том что, когда пытаюсь переназначить уже существующую переменную, события не происходит.

  object := {}
, object.base := {}
, object.base.__Set := Func("Set_Event_Object")

Set_Event_Object(_,var,value){
	msgbox % var "`n" value
}
;-------------------------------------------

object.A := 1
object.B := 1

object.A := 2

test.C := 3


А вот еще один скрипт:
Суть его тоже самая, этот вариант видит событие изменения, но видит во всех массивах, а нужно что бы только в object.

  "" := {}
, object.base := {}
, object.base.__Set := Func("Set_Event_Object")

Set_Event_Object(_,var,value){
	msgbox % var "`n" value
}
;-------------------------------------------

object.A := 1
object.B := 1

object.A := 2

test.C := 3

Можно ли доделать один из вариантов что бы работа была только с одним массивом и видело изменения?

p.s первый и второй вариант отличаются только первой строкой.

2

Re: AHK: Отслеживание события установки значения массива

Функция должна вернуть правду.

object := {}
object.base := {}
object.base.__Set := Func("Set_Event_Object")

Set_Event_Object(_,var,value){ 
	msgbox % var "`n" value 
	Return 1
}
;-------------------------------------------

object.A := 1
object.B := 1

object.A := 2

test.C := 3
Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3 (изменено: yalanne, 2016-01-17 17:59:53)

Re: AHK: Отслеживание события установки значения массива

А почему нельзя просто получить содержимое массива просто вызвав например в msgbox:

msgbox % object.A

А только через __Get.
Я вот такую паутину намотал, вроде работает. Есть более простой вариант?

object := {_:{}}
object.base := {}
object.base.__Set := Func("Set_Event_Object")
object.base.__Get := Func("Get_Event_Object")

Set_Event_Object(_,var,value){
	msgbox % "Событие __Set`n" var "`n" value
	return _._.Insert(var,value)
}

Get_Event_Object(_,var){
 return _._[var]
}
;-------------------------------------------

object.A := 1
object.A := 2
object.B := 3

msgbox % object.A "`n" object.B
Return

Нашел все таки без __get сделать:

object := {}
object.base := {}
object.base.__Set := Func("Set_Event_Object")

Set_Event_Object(_,var,value){
	msgbox % "Событие __Set`n" var "`n" value
    return _.base.Insert(var, value)
}

;-------------------------------------------

object.A := 1
object.A := 2
object.B := 3


msgbox % object.A "`n" object.B
Return