Я сегодня играл с PHP, делая то, что я обычно делаю, когда я пробую язык, на котором я либо не знаю, либо не очень хорошо разбираюсь: пишу маленькую дерьмовую карточную игру.
Первым заданием было выложить отсортированную колоду со всеми доступными картами. Вот моя (неудачная) попытка:
<?php
$sorted_deck = array_map(
function($suit) {
$card = function($rank) {
return array(
'suit' => $suit
, 'rank' => $rank
);
};
return
array_map($card, range(2, 10))
+ array_map($card, array('jack', 'queen', 'king', 'ace'))
;
}
, array('clubs', 'diamonds', 'hearts', 'spades')
);
?>
Я не уверен, что этот код даже логически корректен; Я написал это в спешке. Но даже если бы я захотел проверить это, я не смогу, потому что это не сработало со следующим сообщением: «Неопределенная переменная: костюм».
Есть только одно место, где используется $ suit, и это внутри функции $ card. Учитывая, что функция $ card назначена внутри анонимной функции, в качестве аргумента которой используется $ suit, конечно, она доступна, верно? Кроме того, это должно быть определено, учитывая, что собственная функция PHP array_map предоставляет аргумент из моего массива определенных значений.
Я преобразовал function card($rank) { ...
в $card = function($rank) { ...
, думая, что, возможно, первое делает его глобальным, как это делает сабл Perl, делая внутреннюю переменную недоступной. Но последнее тоже не работает, к моему большому удивлению.
Может кто-нибудь подтолкнуть меня в правильном направлении?