如何分析复杂的类型

julia> using StatsModels, FixedEffectModels

julia> import StatsModels: capture_call

julia> macro Atest2(ex)
           StatsModels.is_call(ex, :~)
               length(ex.args) == 3
                   StatsModels.terms!(StatsModels.sort_terms!(StatsModels.parse!(ex)))
                   end
@Atest2 (macro with 1 method)

julia> f1 = @Atest2(Sales ~ NDI + fe(State) + fe(Year))
FormulaTerm
Response:
  Sales(unknown)
Predictors:
  NDI(unknown)
  (State)->fe(State)
  (Year)->fe(Year)

julia> typeof(f1)
FormulaTerm{Term, Tuple{Term, FunctionTerm{typeof(fe), var"#3#5", (:State,)}, FunctionTerm{typeof(fe), var"#4#6", (:Year,)}}}

我在尝试查看FixedEffectModels这个包的源码,然后一点点拆解后学习,上面的例子是我尝试复现包里的一段代码。
我把输出结果整理下,方便查看

FormulaTerm{
    Term, 
    Tuple{Term, 
            FunctionTerm{typeof(fe), var"#3#5", (:State,)}, 
            FunctionTerm{typeof(fe), var"#4#6", (:Year,)}
    }
}

我的第一个问题是:

  • 1 var"#3#5"这些是什么东西呢?
  • 2 这种不断嵌套的类型,该怎么分析?构造这么复杂的类型,是julia开发鼓励的吗?
    另外,我想请教一下有没有阅读包的一些资料推荐,或者,教如何写一些工程化,项目化的代码的资料或教材?我目前看到的都是解释语法的,但是一个项目如何写,却没有头绪。我想看看,这样可能会对我阅读包有帮助。

vscode里ctrl加点击直接看类型定义

我后来一点点拆看看了,已经理清楚了,不过感觉如果对整个包不太熟悉的话,确实有点难分析。你说的方法适用于查看源码,但不适用看类型关系吧?其他OOP的语言对应的IDE应该会有继承树之类的,但julia可能很难弄了,不知道大家开发项目都会怎么设计?