这就是我想要的:
defmodule Othello.Game do
@width 8
alias Othello.Game, as: Game
alias Othello.Utils, as: Utils
defstruct enabled_spaces: Utils.gen_list(@width * @width, fn _ -> false end),
is_game_over: false,
is_first_player: true
def width(), do: @width
end
但显然我不能用这种方式投射类型。
有办法吗?我很好奇......
谢谢!
答案 0 :(得分:0)
首先,类型Class<A>
的值只能是完全类A
的类对象,它不能是任何其他类。某些其他类B
的类对象为Class<B>
,Class<B>
永远不是Class<A>
的子类型。您可能需要Class<? extends A>
参数。
其次,你对.isAssignableFrom()
的使用似乎是倒退的(除了它在语法上无效,因为B
不是一个有效的表达式)。 clazz.isAssignableFrom(B.class)
表示由clazz
表示的类是B
的超类,在这种情况下,将clazz
强制转换为{{}是没有意义的1}}。您可能需要Class<? extends B>
。
一旦你进行了上面的第一次更改(make B.class.isAssignableFrom(clazz)
类型clazz
),演员会编译,虽然它将是未经检查的演员。如果您不想进行未选中的广告投放,而不是Class<? extends A>
,则可以执行(Class<? extends B>)clazz
。