Tôi đang cố gắng viết một tập các macro tất cả sẽ phải phụ thuộc vào kiến thức về cùng một mô-đun và do đó, tôi cố gắng tránh bỏ qua mô-đun này một cách rõ ràng cho từng hàm (tôi thực sự ổn khi làm vì vậy, nhưng khi tôi đang học ngôn ngữ tôi đang cố gắng khám phá tất cả các khả năng!).Có thể truy cập động mô-đun bằng chuỗi hoặc ký hiệu không?
Vì vậy, tôi đang viết (Mục đích là để truy cập SomeOtherModule
, hoặc gọi SomeOtherModule.foo
bên trong tạo ra foo
chức năng.)
defmodule MacrosUser do
use MyMacros, SomeOtherModule
end
defmodule MyMacros do
defmacro __using__(opts) do
{:__aliases__, _, module_path} = opts
quote do
def foo do
module_path
|> Enum.join(".")
|> apply(:foo, [])
end
end
end
end
Nhưng điều này rõ ràng là không hoạt động như mong đợi apply/3
một mô-đun và không phải là một chuỗi hoặc biểu diễn biểu tượng tên của mô-đun.
Về cơ bản, như tiêu đề cho biết, tôi đang tìm cách để tạo chuỗi sao cho chuỗi hoặc biểu tượng cho trước sẽ truy cập vào mô-đun tương ứng hoặc gọi hàm của mô-đun đó.
Ngoài ra, tôi biết rằng có thể truy cập mô-đun hiện tại qua __MODULE__
trong macro, nhưng tôi đang tìm cách truy cập bất kỳ mô-đun hiện tại nào, không chỉ mô-đun hiện tại.
Khi nằm trong ngữ cảnh 'MyMacros',' __MODULE__ == MyMacros ==: "Elixir.MyMacros" '. –
Vâng, tôi biết. Trong ví dụ này, tôi đang tìm cách truy cập 'SomeOtherModule' được chuyển tới hook' __using__'. Tôi có lẽ nên cập nhật câu hỏi. – user2205259