вызовите родительского конструктора в рубине

Swift 3: Вы также можете использовать семафоры на этом пути. Это очень полезно, кроме того, вы можете точно отслеживать, когда и какие процессы будут завершены. Это было извлечено из моего кода:

    //You have to create your own queue or if you need the Default queue
    let persons = persistentContainer.viewContext.persons
    print("How many persons on database: \(persons.count())")
    let numberOfPersons = persons.count()

    for eachPerson in persons{
        queuePersonDetail.async {
            self.getPersonDetailAndSave(personId: eachPerson.personId){person2, error in
                print("Person detail: \(person2?.fullName)")
                //When we get the completionHandler we send the signal
                semaphorePersonDetailAndSave.signal()
            }
        }
    }

    //Here we will wait
    for i in 0..<numberOfPersons{
        semaphorePersonDetailAndSave.wait()
        NSLog("\(i + 1)/\(persons.count()) completed")
    }
    //And here the flow continues...
27
задан Stan Kurilin 26 April 2010 в 18:59
поделиться

3 ответа

Во-первых, ваш метод должен быть инициализацией , а не инициализацией . Затем вы можете использовать super для вызова метода родительского класса. Что касается вызова инициализатора C в A , для ясности я бы рекомендовал разделить материал инициализации на другую функцию, а затем просто вызвать эту функцию напрямую. Это проще реализовать, и это понятнее.

25
ответ дан 28 November 2019 в 04:09
поделиться

В Ruby нет конструкторов, поэтому, очевидно, их нельзя вызывать, родительские или иные. Однако в Ruby есть методы, и для вызова метода родителя с тем же именем, что и текущий выполняемый метод, вы можете использовать ключевое слово super. [Примечание: super без аргументов является ярлыком для передачи тех же аргументов, которые были переданы в текущий выполняемый метод. Если вы действительно хотите передать нет аргументов, вы должны сделать это явно: super().]

38
ответ дан Jörg W Mittag 28 November 2019 в 04:09
поделиться

Используйте метод super ! Однако в Ruby нет множественного наследования.

class B

  attr_accessor :b, :bb

  def initialize(b, bb)
    @b, @bb = b, bb
  end

end

module C

end

class A < B
  include C  # <= if C was a class, you'd get: TypeError: wrong argument type Class (expected Module)

  attr_accessor :a, :aa

  def initialize(a,b,aa,bb)
    @a, @aa = a, aa
    super(b, bb)  # <= calls B#initialize
  end

end

a = A.new(1,2,3,4)
puts a.inspect # => #<A:0x42d6d8 @aa=3, @a=1, @b=2, @bb=4>
29
ответ дан 28 November 2019 в 04:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: