1 (изменено: yalanne, 2015-07-05 15:48:34)

Тема: AHK: Работа внутри пользовательского массива

Есть вот такой код:

class test
    {
    static Width := 100
    static x := (A_ScreenWidth- Width)//2

    }

msgbox % test.Width "`n" test.x

Вопрос почему x не хочет высчитываться. Как сделать что бы работало.
И еще вопрос как сделать массив в массиве типа этого:

test := {test2:{qq:1}}
msgbox % test.test2.qq

только тем способом?

2

Re: AHK: Работа внутри пользовательского массива

Фиг его знает почему, не вникал в классы. Но вот так срабатывает.


class test
    {
    static Width := 100
    static x := (A_ScreenWidth - test.Width)//2

    }

msgbox % test.Width "`n" test.x

3 (изменено: bWRmeA, 2015-07-05 17:44:59)

Re: AHK: Работа внутри пользовательского массива

class test {
    class test2 {
        static qq := 1
    }
}

test2 существует только в test и не будет создаваться в объектах наследующих test.

почему x не хочет высчитываться

static x := (A_ScreenWidth- Width)//2

Подразумевает что существует какая-то "облась видимости" внутриклассовых переменных, но на самом деле нет, class keyword даёт возможность создать объект при старте скрипта, и ничего более.

4

Re: AHK: Работа внутри пользовательского массива

yalanne пишет:

почему x не хочет высчитываться

Для обращения к переменным класса (заданным как static ClassVar) всегда нужно указать имя класса или унаследованного объекта:

ClassName.ClassVar
yalanne пишет:

как сделать массив в массиве типа этого

class test
{
   static test2 := {qq: 1}
}

MsgBox, % test.test2.qq
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Работа внутри пользовательского массива

Спасибо.

6

Re: AHK: Работа внутри пользовательского массива

bWRmeA пишет:
class test {
    class test2 {
        static qq := 1
    }
}

test2 существует только в test и не будет создаваться в объектах наследующих test.

Правда?

class test {
    class test2 {
        static qq := 1
    }
}

obj := new test

MsgBox, % obj.test2.qq
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Работа внутри пользовательского массива

Правда?

Правда.

Разве при наследовании test в obj создался новый test2? Желаете попридираться к словам?

8

Re: AHK: Работа внутри пользовательского массива

bWRmeA пишет:

test2 существует только в test и не будет создаваться в объектах наследующих test.

Новый не создаётся (потому, что новый создаётcя только со словом new), но существует не только в test, но и в объектах, наследующих test.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Работа внутри пользовательского массива

Речь о том, что class не предоставляет никакой особой функциональности кроме создания объекта при старте скрипта.

Если в __new() test не будет описано создание в экземпляре test нового test2 то он и не будет создан, не смотря на то, что на бумаге test2 присутствует в структуре test, из экземпляров test обращение идёт к test2 который создаётся при старте скрипта месте с test.

Ожидание от class каких-то особых синтаксических плюшек отсутствующих у обычных прототипов - распространённое заблуждение пользователей ахк.

Мне кажется, сообщение №3 принесёт пользу автору темы, мне кажется автор темы понял его именно так, как я ожидал, teadrinker, хватит переливать из пустого в порожнее

10

Re: AHK: Работа внутри пользовательского массива

bWRmeA пишет:

мне кажется автор темы понял его именно так, как я ожидал

Когда кажется — нужно креститься. Автор имеет дело с классами впервые, и понять некорректное определение мог как угодно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: Работа внутри пользовательского массива

Я исхожу из своего опыта изучения ахк и пытаюсь помочь автору избежать наступания на те же грабли.
Насколько эта попытка была эффективна пусть оценивает автор.

Хамство модератора на этом ресурсе для меня не в новинку, заткнуть мне рот придирками к моим формулировкам не удастся.

12 (изменено: yalanne, 2015-07-06 17:03:35)

Re: AHK: Работа внутри пользовательского массива

Вроде как с классами разобрался.
А вот пример из справки по маcсивам:

x := {base: {addr: Func("x_Addr"), __Set: Func("x_Setter")}}

; Assign value, implicitly calling x_Setter to create sub-objects.
x[1,2,3] := "..."

; Retrieve value and call example method.
MsgBox % x[1,2,3] "`n" x.addr() "`n" x[1].addr() "`n" x[1,2].addr()

x_Setter(x, p1, p2, p3) {
    x[p1] := new x.base
}

x_Addr(x) {
    return &x
}

для чего он, где этим можно пользоваться, я так и не понял. Можете объяснить.

13

Re: AHK: Работа внутри пользовательского массива

bWRmeA пишет:

Хамство модератора на этом ресурсе для меня не в новинку, заткнуть мне рот придирками к моим формулировкам не удастся.

bWRmeA, оценка действий модератора не находится в вашей компетенции. Вам пока предупреждение, в следующий раз последствия будут более серьёзные.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14 (изменено: bWRmeA, 2015-07-06 17:18:11)

Re: AHK: Работа внутри пользовательского массива

для чего он, где этим можно пользоваться

Любая возможность языка предназначена для простоты выражения мыслей, инструмент предназначен для использования, но наличие инструмента не вынуждает им пользоваться. Если нет конкретной задачи то и заморачиваться не стоит.

Пример показывает, как на запись в массив поставить "перехватчик/обработчик" в прототипе

15

Re: AHK: Работа внутри пользовательского массива

Я просто ради интереса изучаю , если это когда нибудь пригодится то воспользуюсь знаниями.

16

Re: AHK: Работа внутри пользовательского массива

Остальные сообщения перенесены сюда.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder