1 (изменено: KusochekDobra, 2018-04-27 21:20:14)

Тема: AHK: Встроенные методы объекта.

Всем добра!

Так, работает:


a := [13, 45, 67, 89]
b := a.Clone()
b.InsertAt(2, 7)

aFunc(a*)
aFunc(b*)
OutputDebug,Finish
aFunc(one, two, three, four, five := 0) {
	OutputDebug,Call
	MsgBox,,Title,% one "`n"  two "`n" three "`n" four "`n" five
}

И так:


a := [13, 45, 67, 89]
b := InsertMe(CloneMe(a), 7, 2)

aFunc(a*)
aFunc(b*)
aFunc(a.Clone()*)
aFunc(InsertMe(CloneMe(a), 9, 3)*)
aFunc(InsertMe(a.Clone(), 19, 4)*)

OutputDebug,Finish
aFunc(one, two, three, four, five := 0) {
	OutputDebug,Call
	MsgBox,,Title,% one "`n"  two "`n" three "`n" four "`n" five
}
CloneMe(a) {
	b := []
	Loop,% a.Length()
		b.Push(a[A_Index])
	return b
}
InsertMe(b, item, pos := 1) {
	c := [], i := 1
	Loop,% b.Length() + 1
		c.Push(A_Index != pos ? b[i++] : item)
	return c
}

А так, вызывает только первый раз и выходит:


a := [13, 45, 67, 89]
b := a.Clone().InsertAt(2, 7)

aFunc(a*)
aFunc(b*)
aFunc(a.Clone().InsertAt(2, 7)*)
aFunc((a.Clone()).InsertAt(2, 7)*)

c := a.Clone()
aFunc(c.InsertAt(2, 7)*)

OutputDebug,Finish
aFunc(one, two, three, four, five := 0) {
	OutputDebug,Call
	MsgBox,,Title,% one "`n"  two "`n" three "`n" four "`n" five
}

Скажите пожалуйста, это следует отправить в баг-репорт, или я не правильно делаю запись?

UPD:
Туплю. InsertAt() - ведь ничего не возвращает, а только модифицирует объект.

2

Re: AHK: Встроенные методы объекта.

Бобра вам!
b := a.Clone().InsertAt(2, 7)
Это присвоение интересно тем, что метод .InsertAt никогда ничего не возвращает (что описано в справке).
Метод является операцией над массивом, но не создает новый.
Стало быть переменная b всегда пуста.
Предлагаю расписать это на две строки.

KusochekDobra пишет:

первый раз и выходит

И все будет входить и выходить, замечательно выходить!