gpt4 book ai didi

elixir - 通过委托(delegate)现有功能实现协议(protocol)

转载 作者:行者123 更新时间:2023-12-04 18:09:28 25 4
gpt4 key购买 nike

我正在通过对棋盘游戏建模来学习 Elixir,并且我有以下代码:

defprotocol Board do
def can_handle_move(self)
def handle_move(self, move)
end

defimpl Board, for: List do
def can_handle_move(self), do: Enum.empty?(self)
def handle_move(self, move), do: List.delete(self, move)
end

实现看起来比实际更复杂。实际上, can_handle_move只是 Enum.empty?handle_move只是 List.delete . Elixir 有办法表达这一点吗?就像是:
defimpl Board, for: List do
def can_handle_move = &Enum.empty?/1
def handle_move = &List.delete/2
end

...无法编译。我也试过没有 def s。

最佳答案

试试 Kernel#defdelegate/2为了它。

defimpl Board, for: List do
defdelegate can_handle_move(self), to: Enum, as: :empty?
defdelegate handle_move(self, move), to: List, as: :delete
end

关于elixir - 通过委托(delegate)现有功能实现协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18219689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com