開始使用免費開始

讓它更有「類別」感(1)

除了讀取物件的類別之外,class() 也能用來覆寫類別。語法如下:

class(x) <- "some_class"

這對清單(list)特別實用,因為清單可以把多個變數組合成更複雜的變數。(還記得樂高的比喻嗎:單一變數就像一塊樂高積木,而你可以用清單把它們組起來,打造你想要的東西。)

在這個練習中,你會查看一個用來儲存西洋棋棋局狀態的物件,並覆寫它的類別。

為了看懂這個練習,你需要一點西洋棋的背景知識。

  • 一局西洋棋有 2 位玩家,分別是「white」與「black」。
  • 每位玩家有 6 種棋子:king、queen、bishop、knight、rook,以及 pawn。
  • 每個棋子的棋位可用列(「a」到「h」)與行(1 到 8)來記錄。

本練習屬於課程

在 R 中使用 S3 與 R6 的物件導向程式設計

檢視課程

練習說明

工作空間裡已經預先定義了清單變數 chess

  • 先探索 chess,了解它的結構。
  • chess 的類別覆寫為 "chess_game"
  • 使用 is.list()文件)檢查 chess 是否仍然是清單。
  • 判斷棋盤上還剩下多少棋子。
    • 一個不錯的方法是用 unlist()文件)把物件攤平,然後回傳其 length()文件)。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

# Explore the structure of chess
str(chess)

# Override the class of chess
___ <- ___

# Is chess still a list?
___

# How many pieces are left on the board?
___
編輯並執行程式碼