Menu
CoddyTech

回顾:温度

本课属于 Coddy R 学习旅程的“面向对象编程”单元。第 6 课,共 57 课。

challenge icon

挑战

中等

在 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() 返回保留一位小数的 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 在线编译器