Помните нашу структуру Person
из предыдущего примера?
struct Person:
age: uint256
name: String[64]
people: HashMap[uint256, Person]
Теперь мы узнаем, как создавать новых Людей
и добавлять их в нашу отображение people
.
// создаем нового человека
Person vasa = Person({ name: "vasa", age: 22 })
// Добовляем этого человека в отображение с ключом `0`:
self.people[0] = vasa
Мы также можем объединить их вместе и сделать их в одной строке кода, чтобы все было в чистоте:
self.people[0] = Person({ name: "vasa", age: 22 })
Обратите внимание, что мы используем ключевое слово self
для доступа к переменной состояния people
.
self
- это переменная среды, используемая для ссылки на контракт изнутри. self
позволяет вам читать и писать в переменные состояния и вызывать частные (внутренние) функции в контракте. Мы узнаем о внешних / внутренних функциях в следующей главе.
self
используется для доступа к переменным состояния контракта, как показано в следующем примере:
message: String[10]
@external
def setMessage(msg: String[10]):
self.message = msg
self
также используется для вызова внутренних функций в контракте:
@internal
def multiplyByTwo(amount: uint256):
amount * 2
@external
def calculate(amount: uint256):
self.multiplyByTwo(amount)
Заставим нашу функцию createPokemon
что-нибудь сделать!
-
Удалите ключевое слово
pass
. Заполните тело функции, чтобы она создавала новогоPokemon
и добавляла его в отображениеpokemonList
.name
,dna
, иHP
нового покемона должны поступать из аргументов функции. -
Не забудьте использовать переменную окружения
self
для доступа к отображениюpokemonList
. -
Давайте сделаем это одной строкой кода, чтобы все было в порядке.