Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Isolar ambiente de pré-correção #1

Open
andrechalom opened this issue Apr 24, 2018 · 4 comments
Open

Isolar ambiente de pré-correção #1

andrechalom opened this issue Apr 24, 2018 · 4 comments
Assignees
Labels
bug Something isn't working

Comments

@andrechalom
Copy link
Member

Na versão atual, o comando rm(list=ls()) pode apagar todos os objetos construidos pelas precondições. Como fazer para contornar isso?

@diogro
Copy link

diogro commented Apr 30, 2018

Acho que é relativamente simples criar um env exclusivo pros objetos de correção e um para dos objetos criados pelos alunos. Uma opção boa é rodar todo o codigo do aluno dentro de uma função com um env novo, e ai vc tem um env com os objetos que ele criou e pode corrigir usando esse env vazio exclusivo do aluno. Algo assim:

studentCodeRunner <- function(file, envir = new.env()) {
  stopifnot(file.exists(file))
  stopifnot(is.environment(envir))
  
  lines <- readLines(file, warn = FALSE)
  exprs <- parse(text = lines)
  
  n <- length(exprs)
  if (n == 0L) return(invisible())
  
  for (i in seq_len(n - 1)) {
    eval(exprs[i], envir)
  }
  invisible(eval(exprs[n], envir))
}
e = new.env()
studentCodeRunner(file = "notar.1.4.r", envir = e)
ls(e)

@diogro
Copy link

diogro commented Apr 30, 2018

Acho que isso resolve o issue #5 tb, é só comparar os objetos gabarito com tudo que tiver no env do aluno.

@andrechalom
Copy link
Member Author

O código antigo do notaR faz isso com um único env, no qual são rodadas as "precondições" e o script do aluno. Em um único env, ocorre o problema do aluno sobreescrever os objetos de precondição. Rodando as precondições sem env, corre o risco do exercício sobreescrever funções importantes, como a própria funcionalidade do corretor. E fazendo simplesmente dois envs, não dá pra rodar os códigos de teste.

O que eu estou pensando em fazer é manter um env com o código do aluno e extrair desse env os objetos que o aluno criar (vide #5) para um env de correção, no qual estariam criados os objetos das precondições.

@adalardo
Copy link

adalardo commented May 2, 2018 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants