How to eval strings in racket

2020-07-06 03:06发布

问题:

I'm trying to understand how to get the eval function to read a string and evaluate the content that's inside the string.

Currently I know that

> (eval '(+ 1 2))
   3

but I'm not that knowledgeable with the use of racket. So at the moment I'm trying to get it so that I can do this:

> (eval "(+ 1 2)")
   3

Any advice or links to useful resources would be appreciated.

回答1:

You want to use read together with open-input-string. Like so:

-> (eval (read (open-input-string "(+ 1 2)")))
3

You can also use with-input-from-string:

-> (with-input-from-string "(+ 1 2)"
     (lambda () (eval (read))))
3