Skip to content

Module 4: Functions & Scoping 🛠️

📝 Stats

  • Số lượng: 10 câu hỏi
  • Độ khó: Hard
  • Mục tiêu: Hiểu Lexical Scoping.

MCQ

Q1. (Scoping) Kết quả của đoạn code sau là gì?

r
a <- 10
f <- function() {
  a <- 20
  a
}
f()
print(a)
  • [ ] 20 và 20
  • [ ] 20 và 10
  • [ ] 10 và 10
  • [ ] Error

Đáp án: 20 và 10. Giải thích: Biến a trong hàm f là biến cục bộ (local), nó che biến a toàn cục (global) nhưng không làm thay đổi giá trị của global a.

Q2. Hàm my_fun(a = 1, b) có tham số b không có giá trị mặc định. Nếu gọi my_fun(a=2), điều gì xảy ra?

  • [ ] Lỗi ngay lập tức "b is missing".
  • [ ] Hàm chạy bình thường nếu bên trong body hàm KHÔNG dùng đến b (Lazy Evaluation).
  • [ ] b nhận giá trị NULL.
  • [ ] b nhận giá trị NA.

Đáp án: Hàm chạy bình thường... Lazy Evaluation.


Coding Challenge

Challenge: Function Factory

Viết một hàm make_adder(n) trả về một hàm (closure) cộng n vào tham số của nó.

r
make_adder <- function(n) {
  function(x) {
    x + n
  }
}

add_5 <- make_adder(5)
add_5(10) # Kết quả phải là 15