Erros, bugs, perguntas - página 2461

 
fxsaber:

Poderia desenvolver este ponto?

Abaixo está a minha opinião subjectiva, se eu estiver errado algures, terei todo o prazer em ajudar.


StringLen costumava funcionar O(n) até ao primeiro carácter NULL (0x0000) na corda, agora funciona O(1).
Ocomprimento da corda pode sempre ser truncado através de StringSetCharacter(str, pos, 0x00), mas introduziram StringSetLength por alguma razão.

Muito provavelmente, a tarefa de aceleração de código quando se trabalha com cordas foi resolvida.
A tarefa de acelerar o código foi resolvida e ninguém se importa que metade da função trate agora caracteres NULL em cadeia e a outra metade não.

#define  PRINT(x) Print(#x, ":", string(x))

void OnStart(){  
   string str = "123456789";
   PRINT(str);
   PRINT(StringLen(str));
   
   PRINT(StringSetCharacter(str, 7, 0x00));
   PRINT(StringLen(str));
   
   str += "\x00" + str;
   PRINT(StringLen(str));
   
   str += str;
   PRINT(str);
   PRINT(StringLen(str));
   
   ushort array[];
   PRINT(StringToShortArray(str, array));
   ArrayPrint(array);
   
   PRINT(StringLen(str));
   PRINT(StringLen(ShortArrayToString(array)));
   PRINT(StringLen(ShortArrayToString(array, 0, StringLen(str))));
} 

O resultado:

2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      str:123456789
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringLen(str):9
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringSetCharacter(str,7,0x00):true
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringLen(str):7
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringLen(str):15
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      str:1234567
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringLen(str):30
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringToShortArray(str,array):31
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      49 50 51 52 53 54 55  0 49 50 51 52 53 54 55 49 50 51 52 53 54 55  0 49 50 51 52 53 54 55  0
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringLen(str):30
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringLen(ShortArrayToString(array)):7
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringLen(ShortArrayToString(array,0,StringLen(str))):7
 
Sergey Dzyublik:

Abaixo está a minha opinião subjectiva, se eu estiver errado algures, terei todo o prazer em ajudar.


StringLen costumava funcionar O(n) até ao primeiro caracter NULL (0x0000) na corda mas agora funciona O(1).
Ocomprimento da corda pode sempre ser truncado através de StringSetCharacter(str, pos, 0x00), mas introduziram StringSetLength por alguma razão.

Muito provavelmente, a tarefa de aceleração de código quando se trabalha com cordas foi resolvida.
A tarefa de acelerar o código foi resolvida e ninguém se importa que metade da função trate agora caracteres NULL em cadeia e a outra metade não.


O resultado:

Por favor, refreie as suas emoções.
Da próxima vez que usar linguagem grosseira, terá de ser banido - não estamos num bar aqui. E já não está na moda jurar num bar.
 
Sergey Dzyublik:

StringLen costumava funcionar O(n) até ao primeiro caracter NULL (0x0000) na corda, agora funciona O(1)

Apenas bugs parcialmente corrigidos ... porque não!? Na minha memória StringLen sempre funcionou correctamente (pelo menos em x32)
 
Sergey Dzyublik:
Aos promotores:
Por favor, acrescente a capacidade de especificar a geração de código forçado para o operador de atribuição padrão (copy constructor):

É um pouco complicado. É mais fácil utilizar a analogia padrão do construtor:

1) qualquer operador de atribuição substitui o operador de atribuição predefinido

2) qualquer operador de cópia anula o operador de cópia predefinido

 
A100:
Erros apenas parcialmente corrigidos ... porque não!?

Porque a MQL não tem uma ideia consistente quando se lida com cordas com caracteres NULL, este é o problema.
Por exemplo, StringToShortArray suporta caracteres NULL numa corda enquanto a função inversa ShortArrayToString não...

Como resultado, é gasto mais tempo na captura de insectos e na procura de soluções de trabalho do que na resolução de tarefas específicas.

 
A100:

É um pouco complicado. É mais fácil utilizar a analogia padrão do construtor:

1) qualquer operador de atribuição substitui o operador de atribuição predefinido

2) qualquer operador de cópia cancela o operador de cópia predefinido

Não preciso de desfazer; pelo contrário, preciso de uma geração forçada.
A MQL não tem qualquer funcionalidade para cópia profunda de tipos complexos, e na atribuição de operador e construtor de cópias são implementados por defeito.

 
Sergey Dzyublik:

Uma vez que não há uma ideia consistente na MQL quando se lida com cordas com caracteres NULL, este é o problema.
Por exemplo, StringToShortArray suporta caracteres NULL numa corda, enquanto a sua função inversa ShortArrayToString não...

Por um lado sim, por outro, é explicitamente declarado na Documentação: "ou até que o terminal 0 seja satisfeito".

 
Sergey Dzyublik:
Bem, não está claro porque é que as linhas zero dos prós foram arrastadas em primeiro lugar.
 
A100:

Por um lado, sim, por outro, é explicitamente declarado na Documentação(que não o faz)

EStringToShortArray diz a mesma coisa:

 Количество элементов массива для копирования. Определяет длину результатной строки. По умолчанию -1, что означает копирование до конца массива, либо до встречи терминального 0.

Contudo, isto não o impede de lidar adequadamente com caracteres NULL na corda.

 
Olá. A versão móvel MT5 não está ligada ao meu corretor Alpari. Qual é o problema? Será isto corrigido em algum momento?