метод инициализации ruby ​​- цель инициализации аргументов

Мне было любопытно, и поэтому я начал инициировать 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

0
задан Sebastian Palma 18 January 2019 в 18:34
поделиться

3 ответа

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

Это глупо, но дает представление:

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
0
ответ дан iGian 18 January 2019 в 18:34
поделиться

Вы можете установить переменную экземпляра в любом методе вашего класса.

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
0
ответ дан mechnicov 18 January 2019 в 18:34
поделиться

Переменные экземпляра, объявленные в вашем методе инициализации, должны быть теми, которые вы хотите установить во время инициализации. В вашем примере класса 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, а затем увеличит его оттуда.

0
ответ дан Sebastian Scholl 18 January 2019 в 18:34
поделиться