MulaiMulai sekarang secara gratis

Utamakan yang Pertama

Ada satu metode publik khusus bernama initialize() (perhatikan ejaan American English). Metode ini tidak dipanggil langsung oleh pengguna. Sebaliknya, ia dipanggil secara otomatis saat sebuah objek dibuat; yaitu ketika pengguna memanggil new().

initialize() memungkinkan Anda mengatur nilai field privat ketika Anda membuat objek R6. Pola untuk fungsi initialize() adalah sebagai berikut:

thing_factory <- R6Class(
  "Thing",
  private = list(
    a_field = "a value",
    another_field = 123
  ),
  public = list(
    initialize = function(a_field, another_field) {
      if(!missing(a_field)) {
        private$a_field <- a_field
      }
      if(!missing(another_field)) {
        private$another_field <- another_field
      }
    }
  )
)

Perhatikan penggunaan missing() (docs). Fungsi ini mengembalikan TRUE jika sebuah argumen tidak diberikan dalam pemanggilan fungsi.

Argumen untuk metode new() pada factory akan diteruskan ke initialize().

a_thing <- thing_factory$new(
  a_field = "a different value", 
  another_field = 456
)

Latihan ini adalah bagian dari kursus

Pemrograman Berorientasi Objek dengan S3 dan R6 di R

Lihat Kursus

Petunjuk latihan

Sebuah factory oven microwave telah didefinisikan sebagian untuk Anda.

  • Tambahkan metode publik bernama initialize(). Metode ini harus memungkinkan pengguna menyetel field power_rating_watts dan door_is_open saat objek dibuat.
    • Argumennya harus power_rating_watts dan door_is_open.
    • Di dalam badan metode initialize(), untuk setiap argumen, jika argumen tersebut tidak missing() (docs), maka field privat yang sesuai harus disetel.
  • Buat sebuah objek microwave dengan daya 650 watt, dan pintu terbuka.
    • Panggil metode new() milik microwave_oven_factory.
    • Teruskan argumen power_rating_watts = 650 dan door_is_open = TRUE ke new().
    • Simpan hasilnya ke a_microwave_oven.

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

# Add an initialize method
microwave_oven_factory <- R6Class(
  "MicrowaveOven",
  private = list(
    power_rating_watts = 800,
    door_is_open = FALSE
  ),
  public = list(
    cook = function(time_seconds) {
      Sys.sleep(time_seconds)
      print("Your food is cooked!")
    },
    open_door = function() {
      private$door_is_open <- TRUE
    },
    close_door = function() {
      private$door_is_open <- FALSE
    },
    # Add initialize() method here
    ___ = ___(___, ___) {
      if(!missing(power_rating_watts)) {
        private$power_rating_watts <- power_rating_watts
      }
      ___
      
      
    }
  )
)

# Make a microwave
a_microwave_oven <- ___
Edit dan Jalankan Kode