これは終わり(R6オブジェクトの)
R6クラスは、オブジェクト作成時にカスタムコードを実行するための公開メソッド initialize() を定義できるのと同様に、オブジェクト破棄時にカスタムコードを実行する公開メソッド finalize() も定義できます。finalize() は引数を取りません。一般的には、データベース や ファイル への接続を閉じたり、グローバルな options()(docs)やグラフィックスの par()(docs)パラメータの変更といった副作用を元に戻すために使います。
コードのテンプレートは次のとおりです。
thing_factory <- R6Class(
"Thing",
public = list(
initialize = function(x, y, z) {
# do something
},
finalize = function() {
# undo something
}
)
)
finalize() メソッドは、R の自動ガベージコレクタによってオブジェクトがメモリから削除されるときに呼び出されます。gc()(docs)を入力すると、ガベージコレクションを強制的に実行できます。
この演習はコースの一部です
R における S3 と R6 を使ったオブジェクト指向プログラミング
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Microwave_factory is predefined
microwave_oven_factory
# Complete the class definition
smart_microwave_oven_factory <- R6Class(
"SmartMicrowaveOven",
inherit = ___, # Specify inheritance
private = list(
# Add a field to store connection
___ = ___
),
public = list(
initialize = function() {
# Connect to the database
___$___ = ___(___(), "___")
},
get_cooking_time = function(food) {
dbGetQuery(
private$conn,
sprintf("SELECT time_seconds FROM cooking_times WHERE food = '%s'", food)
)
},
finalize = function() {
# Print a message
___("___")
# Disconnect from the database
___(___$___)
}
)
)
# Create a smart microwave object
a_smart_microwave <- ___
# Call the get_cooking_time() method
___