宏的卫生(hygienic)是指, 我们在宏里赋值的变量, 不会对宏之外的变量造成影响.
例如:
defmodule Hygiene do
defmacro no_interference do
quote do
a = 1
end
end
end
require Hygiene
a = 10
Hygiene.no_interference
a #=> 10
虽然我们在宏之内将 a 赋值为 1, 但 a 的值仍然为 10.
如果我们想打破宏的卫生性, 使用宏来更改变量的值, 那么我们就需要使用 var!
宏:
defmodule NoHygiene do
defmacro interference do
quote do
var!(a) = 1
end
end
end
require NoHygiene
a = 10
Nohygiene.interference
a #=> 1
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。