시작하기무료로 시작하기

전력 제어하기

액티브 바인딩은 비공개 필드를 설정하는 데에도 사용할 수 있어요. 이 경우 바인딩 함수는 "value"라는 이름의 단일 인자를 받아야 해요.

읽기/쓰기 액티브 바인딩을 만드는 패턴은 다음과 같아요.

thing_factory <- R6Class(
  "Thing",
  private = list(
    ..a_field = "a value"
  ),
  active = list(
    a_field = function(value) {
      if(missing(value)) {
        private$..a_field
      } else {
        assert_is_a_string(value) # or another assertion
        private$..a_field <- value
      }
    }
  )
)

값은 바인딩을 함수가 아니라 데이터 변수처럼 할당해요.

a_thing <- thing_factory$new()
a_thing$a_field <- "a new value" # not a_thing$a_field("a new value")

이 연습은 강의의 일부입니다

R에서 S3와 R6로 배우는 Object-Oriented Programming

강의 보기

연습 안내

전자레인지 클래스를 일부만 미리 정의해 두었어요.

  • 전자레인지 클래스 정의를 확장해서 active 리스트 요소를 포함시키세요.
  • 전력 수준을 제어하는 액티브 바인딩을 active 요소에 추가하세요.
    • 함수 이름은 power_level_watts여야 해요.
    • value라는 단일 인자를 받아야 해요.
    • 조회/설정할 비공개 변수 이름은 ..power_level_watts예요.
    • assert_is_a_number()(docs)를 사용해 value가 단일 숫자인지 확인하세요.
    • assert_all_are_in_closed_range()(docs)를 사용해 value0..power_rating_watts 사이인지 확인하세요.
  • 전자레인지 오브젝트를 만들고 a_microwave_oven에 할당하세요.
  • 전력 수준을 조회하세요.
  • 전력 수준을 문자열 "400"으로 설정하려고 시도해 보세요.
  • 전력 수준을 1600으로 설정하려고 시도하세요.
  • 전력 수준을 400으로 설정하세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

# Add a binding for power rating
microwave_oven_factory <- R6Class(
  "MicrowaveOven",
  private = list(
    ..power_rating_watts = 800,
    ..power_level_watts = 800
  ),
  # Add active list containing an active binding
  ___ = ___(
    ___ = ___(___) {
      if(missing(___)) {
        # Return the private value
        ___
      } else {
        # Assert that value is a number
        ___
        # Assert that value is in a closed range from 0 to power rating
        ___
        # Set the private power level to value
        ___ <- ___
      }
    }
  )
)

# Make a microwave 
a_microwave_oven <- ___

# Get the power level
___

# Try to set the power level to "400"
___ <- ___

# Try to set the power level to 1600 watts
___ <- ___

# Set the power level to 400 watts
___ <- ___
코드 편집 및 실행