Nhìn qua các nguồn Elixir Tôi thấy rằng nhân được định nghĩa như thế này:Elixir Macro: Power ** chức năng
@spec (number * number) :: number
def left * right do
:erlang.*(left, right)
end
Tôi muốn thực hiện một chức năng ** để làm sức mạnh như một bài tập. Tuy nhiên, khi tôi cố gắng, tôi nhận được một ngoại lệ và tôi không thể tìm ra cách để làm điều đó một cách chính xác.
@spec (number ** number) :: number
def left ** right do
:math.pow(left, right)
end
Luôn ném một lỗi như:
** (SyntaxError) iex:7: syntax error before: '*'
Tôi đã cố gắng làm cho nó một macro, sử dụng unquote, sử dụng: "**" thay vì **. Không chắc chắn lý do tại sao điều này không hoạt động ...
Bất kỳ ý tưởng nào?
Điều này đã cho tôi một trong những aha đó! khoảnh khắc ngày hôm qua, tôi nghĩ rằng tôi hiểu mô hình phù hợp với chức năng, nhưng nó sâu hơn so với các đối số phù hợp, nó phù hợp với rất nhiều! - Chỉ muốn nói lời cảm ơn :) –
'**' từng là một toán tử quá tải, nhưng đã bị xóa. Điều này bởi vì mọi người _expect_ sử dụng nó như một toán tử 'pow', nhưng sẽ không thể sử dụng phép lũy thừa bên trong mệnh đề bảo vệ này. Tất cả các toán tử elixir mặc định * đều được phép trong các mệnh đề bảo vệ và khi có điều gì đó không phải là điều có thể gây nhầm lẫn cho mọi người. Vì vậy: '**' đã bị xóa. – Qqwy