Мне было любопытно, и поэтому я начал инициировать FirebaseApp без метода .configure()
(как упоминалось creativecreatorormaybenot ).
Выполняя это так, все работает отлично.
app = FirebaseApp(name: 'when-coin-test');
user = await this.auth.signInAnonymously();
Этот пример устарел: https://github.com/flutter/plugins/blob/master/packages/firebase_core/example/lib/main.dart
Например, если вам нужно вызвать метод для присвоения значения переменной экземпляра при создании экземпляра объекта.
Это глупо, но дает представление:
class Person
attr_accessor :name, :age
def initialize(name)
@name = name
@age = random_age
end
def random_age
rand(1..100)
end
end
jack = Person.new('jack')
p jack.age #=> 29
Вы можете установить переменную экземпляра в любом методе вашего класса.
initialize
- это метод, который выполняется сразу после вызова Person.new
.
Все внешние данные для нового объекта передаются через аргументы .new(args)
.
Ваша строка @age = age
- это то же самое, что @age = nil
.
Это связано с тем, что age
отсутствует в аргументах initialize
.
Также у вас есть attr_accessor :age
.
Равно, что у вас есть методы:
def age
@age
end
def age=(age)
@age = age
end
Так что вы можете установить переменную экземпляра следующим образом:
john = Person.new('John')
p john.age #=> nil
john.age = 5
p john.age #=> 5
Переменные экземпляра, объявленные в вашем методе инициализации, должны быть теми, которые вы хотите установить во время инициализации. В вашем примере класса Person
вам не нужно устанавливать @age при инициализации (на самом деле это вызовет ошибку, как у вас сейчас).
class Person
attr_accessor :name, :age
def initialize(name)
@name = name
end
def birthday
if @age.nil?
@age = 1
else
@age += 1
end
end
end
Надеюсь, это поможет. Если метод инициализации не имеет установленного возраста, вы все равно можете использовать / установить возраст в других методах. В этом случае при первом вызове метода Person.birthday
он установит для @age значение 1, а затем увеличит его оттуда.