1 (изменено: upsi_daezium, 2018-10-23 18:18:26)

Тема: AHK: Проблема class proretries object array

Вот пример, чтобы видно было, че как. Проблема со свойствами класса, если свойтво обьект.


arr := ["one ", "two ", "three "]
str := "testing..."

t := new Test(arr, str)
msgbox, % "Array property2 will not display`n property1=" t.pS "`n property2=" t.pA[1] t.pA[2] t.pA[3]
msgbox, % "This works`n property1=" t._pS "`n property2=" t._pA[1] t._pA[2] t._pA[3]
t.pS := "none "
MsgBox, % t.pS " " t._pS 
t._pS := "something"
MsgBox, % t.pS " " t._pS

Class Test {
	pA {
		get { 
			return this._pA
		}
		set {
			this._pA := value
			;this.Insert(value)
			return value
		}
	}

	pS {
		get { 
			return this._pS
		}
		set {
			this._pS := value . ":)"

			return value
		}	
	}

	__New(Array, String) {
		this.pA := Array
		this.pS := String
		;MsgBox, % pS

	}
}

2

Re: AHK: Проблема class proretries object array

upsi_daezium пишет:

Вот пример, чтобы видно было, че как

Честно говоря, ничо не видно. Опишите лучше на словах, в чём проблема, и какого поведения хотите добиться.

upsi_daezium пишет:

"Array property2 will not display`n property1="t.pS

Между строкой и выражением вслед за ней лучше использовать пробелы или даже знак конкатенции, а то кровь из глаз.

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

3

Re: AHK: Проблема class proretries object array

teadrinker извиняюсь, код чисто для примера.
Проблема состоит в обращении к property класса, если это массив или обьект. Как правильно записать чтобы корректно работало:


msgbox, % "Array property2 will not display`n property1="t.pS "`n property2=" t.pA[1] t.pA[2] t.pA[3]

4

Re: AHK: Проблема class proretries object array

Я вашу запись не понимаю. Обратиться к свойству класса, которое массив:

class MyClass
{
   static var := [1, 2, 3]
}
MsgBox, % MyClass.var[1]
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Проблема class proretries object array

А что не понятно-то?
Вот следующий шаг вы get set для свойтва напишите.

6

Re: AHK: Проблема class proretries object array

class MyClass
{
   var[]
   {
      get  {
         Return this._var
      }
      
      set  {
         Return this._var := value
      }
   }
}
MyClass.var := ["first", "second"]
MsgBox, % MyClass.var.1
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7 (изменено: upsi_daezium, 2018-10-23 21:26:47)

Re: AHK: Проблема class proretries object array

teadrinker спасибо, ваш способ работает.
А вот мои изыскания


class MyClass
{
   var[]
   {
      get  {
         Return this._var
      }
      
      set  {
         Return this._var := value
      }
   }
}
MyClass.var := ["first", "second"]
MsgBox, % MyClass.var.1 MyClass.var.2
MsgBox, % MyClass.var["_"][1] MyClass.var["_"][2]

Не очевидное поведение и в документации тоже таких примеров нет, попробуй догадайся.

8

Re: AHK: Проблема class proretries object array

Переменные с префиксом "_" в данном случае имеют служебное значение и семантически не предназначены для того, чтобы к ним обращались извне. Вообще грамотнее было бы так:

class MyClass
{
   var[a]
   {
      get  {
         Return this._var[a]
      }
      
      set  {
         Return this._var[a] := value
      }
   }
}
MyClass.var[1] := "first"
MyClass.var[2] := "second"

MsgBox, % MyClass.var[1] . "`n" . MyClass.var[2]
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Проблема class proretries object array

Снова благодарю.
Я черным по белому читал, что квадратные скобки опциональны, можно не указывать. А тут вот как получается.
Если у вас есть информация с примерами построения классов на ahk, я бы с удовольствием ознакомился.

10

Re: AHK: Проблема class proretries object array

Вот тут читайте:

Parameters can be passed by enclosing them in square brackets to the right of the property name, both when defining the property and when calling it.

Информации о классах в справке достаточно, но, действительно, не всегда всё сразу понятно. Видимо, она рассчитана на тех, кто имел дело с классами в других языках.

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