مراجعة - حارس حديقة الحيوانات
جزء من قسم البرمجة كائنية التوجه في رحلة R على Coddy. الدرس 36 من 57.
التحدي
متوسطأنشئ حديقة حيوانات من فئات S4 عبر خمسة ملفات.
Animal.R: الفئة الافتراضيةAnimalالتي تحتوي على الفتحتينnameوkg، والدالة العامةfood_kg(a)، وطريقةshow()للفئةAnimalالتي تطبعLeo the lion eats 9.5 kg(اسم الفئة بأحرف صغيرة، والطعام بمنزلة عشرية واحدة) وسطرًا جديدًا.Mammal.R: الفئة الافتراضيةMammalالتي تحتوي علىAnimal.Lion.RوElephant.R: ثدييات تأكل 5% و4% من وزنها.Parrot.R: حيوان (وليس من الثدييات) مع الفتحة الإضافيةword، ويأكل 0.1 كغ؛ وتطبع طريقةshow()سطر الحيوان ثمPolly says helloباستخدامcallNextMethod().
يقرأ الكود المقدم أسطرًا مثل lion Leo 190 أو elephant Ella 4000 أو parrot Polly 1 hello، ويطبع كل حيوان، وإجمالي الطعام، وعدد الثدييات، وما إذا كانت Animal افتراضية.
ضع الكود الخاص بك في Animal.R وMammal.R وLion.R وElephant.R وParrot.R. يحتوي main.R على كود الإدخال/الإخراج المقدم ولا يمكن تعديله.
جرّب بنفسك
source("Animal.R")
source("Mammal.R")
source("Lion.R")
source("Elephant.R")
source("Parrot.R")
# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
input <- suppressWarnings(readLines(file("stdin")))
zoo <- list()
for (line in input) {
p <- strsplit(line, " ")[[1]]
kg <- as.numeric(p[3])
a <- switch(p[1],
lion = new("Lion", name = p[2], kg = kg),
elephant = new("Elephant", name = p[2], kg = kg),
parrot = new("Parrot", name = p[2], kg = kg, word = p[4]))
zoo[[length(zoo) + 1]] <- a
print(a)
}
cat(sprintf("food per day: %.1f kg", sum(vapply(zoo, food_kg, numeric(1)))), "\n", sep = "")
cat("mammals: ", sum(vapply(zoo, is, logical(1), "Mammal")), "\n", sep = "")
cat("Animal is virtual: ", isVirtualClass("Animal"), "\n", sep = "")
جميع دروس البرمجة كائنية التوجه
1أساسيات S3
التعامل مع الملفاتالقوائم باستخدام فئةدوال المُنشئأساليب الطباعة والتنسيقأدوات التحقق والمساعدةمراجعة - درجات الحرارة7S4 الوراثة
التوسعة باستخدام containscallNextMethodالأصناف الافتراضيةالتحقق من الأنواع باستخدام is()مراجعة - حارس حديقة الحيوانات2S3 الدوال العامة والطرق
الدوال العامة وUseMethodالطرق الافتراضيةطرق الدوال العامة الأساسيةأساسيات NextMethodمراجعة - مساحات الأشكالتدرّب بنفسك: مترجم R عبر الإنترنت