คำสั่ง super() ในการเข้าถึงตัวแปรในภาษา R
— R — 2 min read
คำสั่ง super() เพื่อเข้าถึงตัวแปรใน R
ในภาษา R, เราสามารถเข้าถึงตัวแปรที่ถูกสืบทอดมาจากคลาสหรือฟังก์ชันที่สร้างขึ้นก่อนหน้านี้ได้โดยใช้คำสั่ง super() ซึ่งช่วยให้เราสามารถเรียกใช้ตัวแปรหรือเมธอดของคลาสหรือฟังก์ชันแม่ได้อย่างง่ายดาย นี่คือตัวอย่างโค้ดที่แสดงการใช้งานคำสั่ง super() ใน R:
# สร้างคลาส ParentParent <- setRefClass("Parent", fields = list(x = "numeric"), methods = list( initialize = function(x) { self$x <- x }, getX = function() { return(self$x) } ))
# สร้างคลาส Child ที่สืบทอดจากคลาส ParentChild <- setRefClass("Child", contains = "Parent", methods = list( initialize = function(x, y) { super$initialize(x) self$y <- y }, getY = function() { return(self$y) }, getXY = function() { x <- super$getX() y <- self$getY() return(list(x = x, y = y)) } ))
# สร้างอ็อบเจ็กต์ของคลาส Childobj <- Child$new(10, 20)
# เรียกใช้เมธอด getX และ getY ด้วย super()x <- obj$getX()y <- obj$getY()
# แสดงค่า x และ yprint(x)print(y)
# เรียกใช้เมธอด getXY ด้วย super()xy <- obj$getXY()
# แสดงค่า x และ y ที่ได้จากเมธอด getXYprint(xy$x)print(xy$y)`
ในตัวอย่างข้างต้น เราสร้างคลาส Parent และคลาส Child ซึ่ง Child เป็นคลาสลูกที่สืบทอดมาจาก Parent ในเมธอด initialize ของคลาส Child เราใช้ super$initialize() เพื่อเรียกใช้เมธอด initialize ของ Parent เพื่อกำหนดค่าตัวแปร x และ y ใน Child นอกจากนี้ เรายังสามารถใช้ super() เพื่อเข้าถึงเมธอด getX และ getY ของ Parent ได้อีกด้วย และเมื่อเราเรียกใช้เมธอด getXY ใน Child เราสามารถใช้ super$getX() และ self$getY() เพื่อเข้าถึงค่า x และ y ใน Parent และ Child ตามลำดับ
การใช้ super() ใน R ช่วยให้เราสามารถเข้าถึงตัวแปรและเมธอดที่ถูกสืบทอดมาได้อย่างสะดวกและยืดหยุ่น ซึ่งเป็นประโยชน์สำคัญในการออกแบบและพัฒนาโครงสร้างของโปรแกรม
สำหรับคำสั่ง super() ในภาษา R มีคุณสมบัติที่น่าสนใจอีกอย่างคือการส่งอาร์กิวเมนต์เข้าสู่เมธอดในคลาสแม่ นี่คือตัวอย่างโค้ดที่แสดงการใช้งานคำสั่ง super() เพื่อส่งอาร์กิวเมนต์ใน R:
# สร้างคลาส ParentParent <- setRefClass("Parent", methods = list( initialize = function(x) { self$x <- x }, printX = function() { print(paste("Value of x:", self$x)) } ))
# สร้างคลาส Child ที่สืบทอดจากคลาส ParentChild <- setRefClass("Child", contains = "Parent", methods = list( initialize = function(x, y) { super$initialize(x) self$y <- y }, printXandY = function() { super$printX() print(paste("Value of y:", self$y)) } ))
# สร้างอ็อบเจ็กต์ของคลาส Childobj <- Child$new(10, 20)
# เรียกใช้เมธอด printXandY ใน Childobj$printXandY()`
ในตัวอย่างข้างต้น เราสร้างคลาส Parent และคลาส Child โดย Child เป็นคลาสลูกที ่สืบทอดมาจาก Parent ในเมธอด initialize ของ Child เราใช้ super$initialize() เพื่อเรียกใช้เมธอด initialize ของ Parent เพื่อกำหนดค่าตัวแปร x ใน Child นอกจากนี้ เรายังสร้างเมธอด printXandY ใน Child ที่ใช้ super$printX() เพื่อเรียกใช้เมธอด printX ใน Parent เพื่อแสดงค่าของตัวแปร x และใช้ self$y เพื่อแสดงค่าของตัวแปร y ใน Child
การใช้งาน super() ใน R ช่วยให้เราสามารถส่งอาร์กิวเมนต์ไปยังเมธอดในคลาสแม่ได้อย่างสะดวก นอกจากนี้ยังช่วยในกรณีที่ต้องการเข้าถึงคำสั่งหรือฟังก์ชันในคลาสแม่ที่มีการเขียนทับ (overridden) ในคลาสลูก