나는 큰 따옴표 안에 vaild CL 표현식을 반환하는 데이터베이스를 가지고 있습니다.문자열로 포함 된 표현식 평가
이 문자열을 표현식으로 변환 할 수 있습니까?
예를 들어, 나는 CLSQL를 통해이 DB에서 쿼리를하고 그 결과로 저를 반환
"(foo a b)"
나는이 표현을 변환하는 방법 :
(foo a b)
그것을 더 평가 하는가?
나는 큰 따옴표 안에 vaild CL 표현식을 반환하는 데이터베이스를 가지고 있습니다.문자열로 포함 된 표현식 평가
이 문자열을 표현식으로 변환 할 수 있습니까?
예를 들어, 나는 CLSQL를 통해이 DB에서 쿼리를하고 그 결과로 저를 반환
"(foo a b)"
나는이 표현을 변환하는 방법 :
(foo a b)
그것을 더 평가 하는가?
> (read-from-string "(foo a b)")
(FOO A B) ;
9
9
는 read-from-string
제조 여러 값의 초이고; 그것을 무시할 수 있습니다 :
(eval (read-from-string "(foo a b)"))
적절한 정의를 원하는대로 할 수 있습니다.
* (read-from-string "(+ 1 2)")
(+ 1 2)
7
보안 문제가 있습니다. 변수 *read-eval*
을 참조하십시오.
* (read-from-string "#.(+ 1 2)")
3
9
당신은 정말 읽기 코드를 평가하지 않도록 *read-eval*
이 NIL
있는지 확인해야합니다.
* (let ((*read-eval* nil)) (read-from-string "#.(+ 1 2)"))
debugger invoked on a SB-INT:SIMPLE-READER-ERROR:
can't read #. while *READ-EVAL* is NIL
는 또한 데이터베이스에서 임의의 입력에 EVAL
를 호출하는 것은 좋은 생각이 아니다.
일반적으로 코드가 허용 된 기능 만 호출하는지 확인하고자합니다.
감사합니다. 어떻게 그 기능을 찾을 수 없습니까? – oakenshield1