Passar parâmetro de OBJETO por valor e não referência

Olá,

gostaria de saber como se passa uma variável objeto (tipo O) por parâmetro como valor?

Pelo que percebi, mesmo sem passar o @oObjeto na chamada da função, ele passa a variável como referência. Ou se existe alguma função como AClone por exemplo, mas para objetos.

Gabriel,

O padrão do ADVPL é sempre passar array e objeto por referência, não há como mudar isso.

Hoje não existe forma de clonar um objeto de forma nativa, você pode serializar ele de forma manual e enviar o seu valor em string, algo nessa linha.

Entendi Daniel, imaginei que era comportamento padrão. E pra sugerir isso como melhoria, seria possível? Ter tipo um oClone()? No meu caso eu vou contornar de outro jeito, mas se tivesse poderia ajudar bastante em alguns cenários.

Eu também gostaria dessa melhoria, ou ao menos uma forma de serializar de forma nativa etc, você pode utilizar a central colaborativa para fazer essa sugestão de melhoria, realmente seria de grande ajuda, pois os processos que fazíamos no passado, podem gerar problemas agora com as propriedades privadas.

Queria entender o porque do operador @ se todo passagem é por referencia apenas pra deixar implícito?

Ricardo, não é toda passagem de parâmetro que é por referência. Por padrão apenas acontece com Arrays e Objetos. O resto tem que passar o operador @

Gabriel, a sim entendi ai faz sentido no quesito em que por default a linguagem tenha a sua segurança de não permitir cópia de variáveis enormes como objeto e Array e a função aClone usada apenas se realmente precisar que seja feita uma cópia da mesma.