4 ms·
Author here. It would seem "understanding" might be the wrong word. If I were to write something like: (+ 'foo 1) I wouldn't have to know how "+" is impl
by astine 15y ago
Author here.
It would seem "understanding" might be the wrong word. If I were to write something like:
(+ 'foo 1)
I wouldn't have to know how "+" is implemented to find the bug in my code. I would if I were to write:
(with-open [foo some-object-that-isnt-a-stream]
...do stuff...)
however, I would have to know the expansion.
If I have to know the details of the expansion of a macro in order to use it correctly, then it is almost by definition leaky.
In the case of "with-open," a simple type check at the beginning of the macro expansion would solve the problem.
- deleted 15y ago[deleted]
- readymade 15y agoYou don't need to know how it's implemented, you just need to know that you have to pass an object that can be closed. You can get that simply by reading the docs. The exception that's thrown in your first example above certainly makes it blatantly obvious what you did wrong, which is nice. but you still have to know that the addition operator doesn't let you concatenate numbers and symbols in order to use it effectively, or your program will crash once you run it. That's on you.