復習:温度
CoddyのRジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 6/57。
チャレンジ
中級Temperature.R に S3 クラス temperature を構築してください。温度は、属性 unit(C または F)を持つ数値です。
new_temperature(value, unit)はstopifnot()で型をチェックし、structure(value, unit = unit, class = "temperature")を返します。validate_temperature(x)は、unit must be C or Fというエラーで停止します。また、値が -273.15 C または -459.67 F を下回る場合は、below absolute zeroというエラーで停止します。temperature(value, unit = "C")はas.double()で値を変換し、単位を大文字にして、検証済みの温度を返します。format.temperature()は小数点以下1桁で21.5 Cを返し、print.temperature()はTemperature: 21.5 Cを出力して、invisible(x)を返します。convert_to(t, unit)は指定された単位の温度を返します(単位がすでに一致している場合は同じ値を返します)。
すべての stop() で call. = FALSE を使用してください。提供されたコードは、行 21.5 c F(値、単位、変換先の単位)を読み込み、温度と変換後の温度を出力します。エラーの場合は、error: とメッセージを出力します。
コードは Temperature.R に記述してください。main.R には提供された入出力コードが含まれており、編集できません。
自分で試してみよう
source("Temperature.R")
# 提供された入出力コード: そのままにしておく
input <- suppressWarnings(readLines(file("stdin")))
for (line in input) {
p <- strsplit(line, " ")[[1]]
result <- tryCatch({
t <- temperature(p[1], p[2])
print(t)
print(convert_to(t, p[3]))
NULL
}, error = function(e) cat("error: ", conditionMessage(e), "\n", sep = ""))
}
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Rオンラインコンパイラ