我想实现这个代码(用Crystal编写)所做的事情:
enum PieceKind
Pawn, Rook, Bishop, Knight, King, Queen
end
def piece_kind_at_init(x, y)
case y
when 2, 7 then PieceKind::Pawn
when 1, 8
case x
when 1, 8 then PieceKind::Rook
when 2, 7 then PieceKind::Bishop
when 3, 6 then PieceKind::Knight
when 4 then PieceKind::King
when 5 then PieceKind::Queen
end
end
end
这是我在Python中能想到的“最好的”版本:
class PieceKind(Enum):
Pawn = auto()
Rook = auto()
Bishop = auto()
Knight = auto()
King = auto()
Queen = auto()
def piece_kind_at_init(x, y):
if y in [2, 7]:
return PieceKind.Pawn
elif y in [1, 8]:
if x in [1, 8]:
return PieceKind.Rook
elif x in [2, 7]:
return PieceKind.Bishop
elif x in [3, 6]:
return PieceKind.Knight
elif x == 4:
return PieceKind.King
elif x == 5:
return PieceKind.Queen
这是好的,但它肯定是可读性较差的版本适当的模式匹配。编写代码最常用的方式是什么?
发布于 2018-07-26 04:48:45
消除冗长elif
链的一种方法是创建转换表。
outer_row_pieces = [PieceKind.Rook,
PieceKind.Knight,
PieceKind.Bishop,
PieceKind.King,
PieceKind.Queen,
PieceKind.Bishop,
Piecekind.Knight,
PieceKind.Rook]
def piece_kind_at_init(x, y):
if y == 2 or y == 7:
return PieceKind.Pawn
if y == 1 or y == 8:
return outer_row_pieces[x]
return None
https://stackoverflow.com/questions/51527204
复制相似问题