Как получить доступ к двойной карте с помощью Sass?

Позже вы также можете взглянуть на некоторые общие библиотеки программирования: когда сложность ваших данных увеличивается, и вы обнаруживаете, что пишете больше и шаблонный код (например, увеличиваете содержимое стейка для игроков, диеты тренеров и пиво наблюдателей), который по-прежнему является шаблоном даже в менее сложной форме. SYB , вероятно, самая известная библиотека (и поставляется с платформой Haskell). На самом деле оригинальная работа по SYB использует очень похожую проблему для демонстрации подхода:

Рассмотрим следующие типы данных, которые описывают организационную структуру компании. Компания разделена на отделы. Каждый отдел имеет менеджера и состоит из набора подразделений, где подразделение является либо единственным сотрудником, либо отделом. Как менеджеры, так и обычные сотрудники - это просто люди, получающие зарплату.

[skiped]

Теперь предположим, что мы хотим увеличить зарплату всех в компании на определенный процент. То есть мы должны написать функцию:

увеличение :: Float -> Компания -> Компания

blockquote>

(остальное в документе - рекомендуется чтение)

Конечно, в вашем примере вам просто нужно получить доступ / изменить одну часть крошечной структуры данных, чтобы она не требовала универсального подхода (все же решение на основе SYB для вашей задачи ниже), но как только вы увидите повторение код / ​​шаблон доступа / модификации вы хотите проверить эту или другие общие библиотеки программирования.

{-# LANGUAGE DeriveDataTypeable #-}

import Data.Generics

data BBTeam = BBTeam { teamname :: String, 
manager :: Coach,
players :: [BBPlayer]}  deriving (Show, Data, Typeable)

data Coach = Coach { coachname :: String, 
favcussword :: String,
 diet :: Diet }  deriving (Show, Data, Typeable)

data Diet = Diet { dietname :: String, 
steaks :: Integer, 
eggs :: Integer}  deriving (Show, Data, Typeable)

data BBPlayer = BBPlayer { playername :: String, 
hits :: Integer,
era :: Double }  deriving (Show, Data, Typeable)


incS d@(Diet _ s _) = d { steaks = s+1 }

addManagerSteak :: BBTeam -> BBTeam
addManagerSteak = everywhere (mkT incS)

0
задан THIAGO SAAD 20 March 2019 в 04:15
поделиться

1 ответ

У вас есть карта с вложенными списками , а не картами.

Таким образом, вы можете создать цикл для этих списков с @each, получая индекс для каждого цикла:

@each $item in $nth-key {
    $index: index($nth-key, $item); // => get the item's number at every loop
    &:nth-of-type(#{$index}):before { content: $item;}
}

Это полный код

@mixin generate-table-nth($page-name) {
    @if $page-name == 'indicators-page' {

      $table-list: (
        table-contract-details:       ('SHOPPING:', 'NOME FANTASIA (ATUAL):', 'CÓD. CONTRATO:', 'DATA ASSINATURA CONTRATO:', 'DATA INAUGURAÇÃO:', 'DATA INÍCIO CONTRATO:', 'DATA FIM CONTRATO:', 'PRAZO CONTRATO:', 'ATIVIDADE:'),
        table-contract-rent:          ('SHOPPING:', 'CÓD. CONTRATO:', 'NOME FANTASIA (ATUAL):', 'DATA INÍCIO ALUG. CONTRATUAL:', 'DATA FIM ALUG. CONTRATUAL:', 'ALUGUEL CONTRATUAL:', 'DATA RENEGOCIAÇÃO:'),
        table-percent-rent:           ('SHOPPING:', 'CÓD. CONTRATO:', 'NOME FANTASIA (ATUAL):', 'TIPO PRODUTO:', 'DATA INÍCIO ALUGUEL %:', 'DATA FIM ALUGUEL %:', 'VOLUME VENDA:', '% VENDA:', 'OBSERVAÇÃO:'),
        table-minimum-rent-reduction: ('SHOPPING:', 'CÓD. CONTRATO:', 'NOME FANTASIA (ATUAL):', 'DATA INÍCIO:', 'DATA FIM:', 'VALOR:', 'TIPO REDUÇÃO:')
      );

      @each $table-key, $nth-key in $table-list {
        $table-name: $table-key;
        &[data-element-name="#{$table-name}"]{
          tbody {
            tr {
              td {
                @each $item in $nth-key {
                   $index: index($nth-key, $item);
                   &:nth-of-type(#{$index}):before { content: $item;}
                }
              }
            }
          }
        }
      }
    }
}

Ваш вывод: [ 118]

table[data-element-name="table-contract-details"] tbody tr td:nth-of-type(1):before {
  content: "SHOPPING:";
}
table[data-element-name="table-contract-details"] tbody tr td:nth-of-type(2):before {
  content: "NOME FANTASIA (ATUAL):";
}
table[data-element-name="table-contract-details"] tbody tr td:nth-of-type(3):before {
  content: "CÓD. CONTRATO:";
}
table[data-element-name="table-contract-details"] tbody tr td:nth-of-type(4):before {
  content: "DATA ASSINATURA CONTRATO:";
}
table[data-element-name="table-contract-details"] tbody tr td:nth-of-type(5):before {
  content: "DATA INAUGURAÇÃO:";
}
table[data-element-name="table-contract-details"] tbody tr td:nth-of-type(6):before {
  content: "DATA INÍCIO CONTRATO:";
}
table[data-element-name="table-contract-details"] tbody tr td:nth-of-type(7):before {
  content: "DATA FIM CONTRATO:";
}
table[data-element-name="table-contract-details"] tbody tr td:nth-of-type(8):before {
  content: "PRAZO CONTRATO:";
}
table[data-element-name="table-contract-details"] tbody tr td:nth-of-type(9):before {
  content: "ATIVIDADE:";
}
table[data-element-name="table-contract-rent"] tbody tr td:nth-of-type(1):before {
  content: "SHOPPING:";
}
table[data-element-name="table-contract-rent"] tbody tr td:nth-of-type(2):before {
  content: "CÓD. CONTRATO:";
}
table[data-element-name="table-contract-rent"] tbody tr td:nth-of-type(3):before {
  content: "NOME FANTASIA (ATUAL):";
}
table[data-element-name="table-contract-rent"] tbody tr td:nth-of-type(4):before {
  content: "DATA INÍCIO ALUG. CONTRATUAL:";
}
table[data-element-name="table-contract-rent"] tbody tr td:nth-of-type(5):before {
  content: "DATA FIM ALUG. CONTRATUAL:";
}
table[data-element-name="table-contract-rent"] tbody tr td:nth-of-type(6):before {
  content: "ALUGUEL CONTRATUAL:";
}
table[data-element-name="table-contract-rent"] tbody tr td:nth-of-type(7):before {
  content: "DATA RENEGOCIAÇÃO:";
}
table[data-element-name="table-percent-rent"] tbody tr td:nth-of-type(1):before {
  content: "SHOPPING:";
}
table[data-element-name="table-percent-rent"] tbody tr td:nth-of-type(2):before {
  content: "CÓD. CONTRATO:";
}
table[data-element-name="table-percent-rent"] tbody tr td:nth-of-type(3):before {
  content: "NOME FANTASIA (ATUAL):";
}
table[data-element-name="table-percent-rent"] tbody tr td:nth-of-type(4):before {
  content: "TIPO PRODUTO:";
}
table[data-element-name="table-percent-rent"] tbody tr td:nth-of-type(5):before {
  content: "DATA INÍCIO ALUGUEL %:";
}
table[data-element-name="table-percent-rent"] tbody tr td:nth-of-type(6):before {
  content: "DATA FIM ALUGUEL %:";
}
table[data-element-name="table-percent-rent"] tbody tr td:nth-of-type(7):before {
  content: "VOLUME VENDA:";
}
table[data-element-name="table-percent-rent"] tbody tr td:nth-of-type(8):before {
  content: "% VENDA:";
}
table[data-element-name="table-percent-rent"] tbody tr td:nth-of-type(9):before {
  content: "OBSERVAÇÃO:";
}
table[data-element-name="table-minimum-rent-reduction"] tbody tr td:nth-of-type(1):before {
  content: "SHOPPING:";
}
table[data-element-name="table-minimum-rent-reduction"] tbody tr td:nth-of-type(2):before {
  content: "CÓD. CONTRATO:";
}
table[data-element-name="table-minimum-rent-reduction"] tbody tr td:nth-of-type(3):before {
  content: "NOME FANTASIA (ATUAL):";
}
table[data-element-name="table-minimum-rent-reduction"] tbody tr td:nth-of-type(4):before {
  content: "DATA INÍCIO:";
}
table[data-element-name="table-minimum-rent-reduction"] tbody tr td:nth-of-type(5):before {
  content: "DATA FIM:";
}
table[data-element-name="table-minimum-rent-reduction"] tbody tr td:nth-of-type(6):before {
  content: "VALOR:";
}
table[data-element-name="table-minimum-rent-reduction"] tbody tr td:nth-of-type(7):before {
  content: "TIPO REDUÇÃO:";
}
0
ответ дан ReSedano 20 March 2019 в 04:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: