My code calls `display` on a bunch of values (of a type I define). Most of
these values chose not to display anything; only a few of them are meant to
print anything at all. However, running the code currently generates a lot
of extra new lines for the non-printing values.

This is the main function being run:

~~~
function checkallmodule(m::Module;test=checkreturntypes,kwargs...)
  score = 0
  for n in names(m)
    f = eval(m,n)
    if isgeneric(f) && typeof(f) == Function
      fm = test(f;mod=m,kwargs...)
      score += length(fm.methods)
      display(fm)
    end
  end
  println("The total number of failed methods in $m is $score")
end
~~~

The variable `fm` will be a FunctionSignature. The two relevant custom
types and their `writemime` methods are below:

~~~
type MethodSignature
  typs::Vector{AType}
  returntype::Union(Type,TypeVar) # v0.2 has TypeVars as returntypes; v0.3
does not
end
MethodSignature(e::Expr) = MethodSignature(argumenttypes(e),returntype(e))
function Base.writemime(io, ::MIME"text/plain", x::MethodSignature)
  println(io,"(",join([string(t) for t in x.typs],","),")::",x.returntype)
end

type FunctionSignature
  methods::Vector{MethodSignature}
  name::Symbol
end

function Base.writemime(io, ::MIME"text/plain", x::FunctionSignature)
  for m in x.methods
    print(io,string(x.name))
    display(m)
  end
end
~~~

The call to `display` in `checkallmodule` should end up calling `writemime`
for `FunctionSignature`. In the case that the `FunctionSignature` has no
methods, the for-loop will not execute and nothing should be displayed.
However, there are still a lot of new lines appearing when I run the code.

Does anyone have any pointers to what might be going wrong or how I might
avoid these new lines?

Thanks,
Leah

Reply via email to