es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo obtener el nombre simple del tipo en Julia?

Digamos que tengo

struct MyStruct{T,U}
  a::T
  b::U
end

Me gustaría definir un show personalizado que elimine mucho ruido del tipo completo.

Por ejemplo, si creo lo siguiente:

z = MyStruct((a=1,b=2),rand(5))

luego typeof muestra mucho más de lo que quiero:

julia-repl
julia> typeof(z)
MyStruct{NamedTuple{(:a, :b), Tuple{Int64, Int64}}, Vector{Float64}}

¿Cómo puedo obtener programáticamente solo MyStruct de z en una cadena?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener de manera programática solo MyStruct de z en una cadena, puede modificar la función show del tipo MyStruct. Una posible implementación es:

    struct MyStruct{T,U}
      a::T
      b::U
    end
    
    Base.show(io::IO, ms::MyStruct) = print(io, "MyStruct")
    

    Esta implementación sobrecarga la función show para objetos del tipo MyStruct. La función simplemente imprime la cadena “MyStruct” en la corriente de I/O dada io. Ahora, si crea una instancia z de MyStruct y llama a typeof(z), obtendrá MyStruct en lugar del tipo completo:

    julia> z = MyStruct((a=1,b=2), rand(5))
    MyStruct((a = 1, b = 2), [0.8622431670109168, 0.523164780107147, 0.2579664235090774, 0.7910454970330265, 0.4333116247432075])
    
    julia> typeof(z)
    MyStruct
    

Comments are closed.