Posso desativar listas de impressão de pequenos números inteiros como strings em Erlang Shell?

StackOverflow https://stackoverflow.com/questions/2348087

  •  23-09-2019
  •  | 
  •  
Foi útil?

Solução

Você pode desativar esse comportamento com shell:strings/1 função Começando com Erlang R16b.

Lembre -se de que essa é a opção global para todos os shells de nós, e pode ser aconselhável recuperá -lo depois de terminar a reprodução é Shell em nós de vida mais longa.

Outras dicas

Não sei se é possível alterar o comportamento padrão do shell, mas você pode pelo menos formatar sua saída corretamente, usando io: formato.

Aqui está um exemplo:

1> io:format("~p~n", [[65, 66, 67]]).
"ABC"
ok
2> io:format("~w~n", [[65, 66, 67]]).
[65,66,67]
ok

E como o shell é apenas para experimentar / manutenção, io:format() deve ser pelo menos o suficiente para sua aplicação real. Talvez você também deva considerar escrever seu próprio método de formato/impressão, por exemplo, formatPerson() Ou algo assim, que formata tudo bem.

Editar: atualizei minha solução porque encontrei uma maneira mais confiável de corrigir o problema:

Para qualquer outra pessoa que tenha esse problema no futuro, descobri quais eram as questões.

No que diz respeito à conta do SharePoint \ System, é mais ou menos um alias usado por outras contas (geralmente contas de serviço) no SharePoint. Nesse caso, é a conta usada pelo meu pool de aplicativos. Referência: Sobre o SharePoint \ System - qual conta é? Como é determinado? .

O fluxo de trabalho parece realmente usar qualquer conta que o SSS ou o BDC designado estiver usando. No meu caso, meu "Serviço Partitioned Secure Store" que meu site do SharePoint estava usando por padrão estava executando a conta SP_ServicaApps. Eu determinei isso lançando meu gerente do IIS no meu servidor do SharePoint e encontrando o SSS apropriado entre os vários pools de aplicativos. A conta SP_Servicaapps foi listada como a identidade.

Devido a correr em algumas dificuldades recebendo meu SSS para trabalhar, decidi usar minha identidade BDC. No Designer do SharePoint, determinei pela primeira vez a conta de serviço usada pelo meu serviço de conectividade de dados de negócios personalizados (SP_Servicaapps). Em segundo lugar, dei as contas SP_Servicaapps e do SharePoint / System "Controle total", "Design" e permissões "Contribuir" na minha lista externa. Isso provavelmente é exagerado, mas eu queria ter certeza de que eles estavam autorizados a acessar a lista externa. Além disso, eles originalmente pareceram ter permissões "controle total", mas depois de clicar em "Editar permissões de usuário" para cada uma, a caixa de diálogo resultante não possuía nenhuma permissão. Depois disso, eu permiti reverttoself no meu servidor do SharePoint: problema bcs com autenticaçãoMode e reverta . Por último, fui ao Central Admin -> Gerenciamento de Aplicativos -> Gerenciar Service Application-> [Nome do Serviço de Conectividade Dados de Negócios] -> Sistemas externos (de vista na fita) -> [Nome do sistema externo] -> [nome da instância do sistema externo] -> Definir o modo de autenticação para "identidade BDC".

durar (e este foi um erro idiota da minha parte), eu tinha um identificador mapeado incorretamente no meu tipo de conteúdo externo. Eu tinha selecionado erroneamente "Vendoremail" como o identificador quando quisesse selecionar "Vendorname". Mais tarde, quando eu criei minha operação de "criação item", eu mapeei "Vendorname" ao identificador sem perceber que estava sendo mapeado para o "Vendoremail" erroneamente selecionado e não "Vendorname". Corrigi esse problema criando um novo tipo de conteúdo externo que tinha os identificadores corretos.

Depois disso, meu fluxo de trabalho escreveu com sucesso à minha lista externa.

A partir de Erlang/Otp R16b, você pode usar a função Shell: Strings/1 para ativar ou desativar isso. Observe que isso também afeta a impressão de coisas que realmente devem ser strings, como "foo" No exemplo seguinte:

1> {[8,9,10], "foo"}.
{"\b\t\n","foo"}
2> shell:strings(false).
true
3> {[8,9,10], "foo"}.   
{[8,9,10],[102,111,111]}

Não, não há como desativá -lo. A melhor alternativa que encontro é imprimir explicitamente o valor na consulta (com io:format) ou depois do fato: io:format("~w\n", [v(-1)]).

Eu não acho que você possa impedir isso. Preparar um átomo parece um kludge - ele altera sua string original.

Normalmente, uso listas: Flatten (String) para forçá -lo a uma string - especialmente o retorno de io_lib: format () nem sempre é imprime como uma string. Usando listas: Flatten () o torna um.

Eu uso o seguinte "estilo C":

sprintf(Format) ->
     sprintf(Format, []).
sprintf(Format, Args) ->
    lists:flatten(io_lib:format(Format, Args)).

O problema é que a string não é um tipo em Erlang. Uma string é apenas uma lista de números inteiros, portanto, não há como o shell distinguir uma string imprimível de uma lista genérica. Não sei se esta resposta para sua pergunta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top