Julia 如何抑制函数返回

Julia 如何抑制函数返回,julia,Julia,假设我有一个具有多个返回值的函数,如下所示。但是,此输出不是信息性的,因为用户不知道每个值代表什么,除非他们查找函数定义。因此,我希望使用println将具有适当名称的结果打印到屏幕上,同时禁止在屏幕上打印实际返回值。在R中,不可见函数可以做到这一点,但在Julia中如何做到同样的事情呢 function trimci(x::Array; tr=0.2, alpha=0.05, nullvalue=0) se=sqrt(winvar(x,tr=tr))./((1-2.*tr)*sqrt(

假设我有一个具有多个返回值的函数,如下所示。但是,此输出不是信息性的,因为用户不知道每个值代表什么,除非他们查找函数定义。因此,我希望使用println将具有适当名称的结果打印到屏幕上,同时禁止在屏幕上打印实际返回值。在R中,不可见函数可以做到这一点,但在Julia中如何做到同样的事情呢

function trimci(x::Array; tr=0.2, alpha=0.05, nullvalue=0)
    se=sqrt(winvar(x,tr=tr))./((1-2.*tr)*sqrt(length(x)))
    ci=cell(2)
    df=length(x)-2.*floor(tr.*length(x))-1
    ci=[tmean(x, tr=tr)-qt(1-alpha./2, df).*se, tmean(x, tr=tr)+qt(1-alpha./2, df).*se]
    test=(tmean(x,tr=tr)-nullvalue)./se
    sig=2.*(1-pt(abs(test),df))
    return ci, tmean(x, tr=tr), test, se, sig
end

您可以做的一件事是为这个函数的返回值定义一个新类型,称它为TrimCIResult或其他什么。然后您可以定义适当的方法来在REPL中显示该对象。或者,您可以使用类型层次结构来概括该解决方案,该类型层次结构可用于存储任何统计测试的结果并显示这些结果。

您可以做的一件事是为该函数的返回值定义一个新类型,称之为TrimCIResult或其他类型。然后您可以定义适当的方法来在REPL中显示该对象。或者,您可以使用类型层次结构来概括该解决方案,该类型层次结构可用于存储任何统计测试的结果并显示这些结果。

值nothing是返回不打印的值的方式:repl专门检查值nothing,如果是表达式返回的值,则不打印任何内容。你要做的是返回一堆值,而不是打印它们,这让我觉得很奇怪。如果一个函数返回了一些东西,我想知道它——让用户知道repl是个坏主意。Harlan的建议是可行的:使用您不想向用户公开的值定义此值的类型作为字段,并自定义其打印,以便不打印您不想显示给用户的字段。

值nothing是返回不打印的值的方式:repl专门检查值nothing和nothing如果这是表达式返回的值,则不打印任何内容。你要做的是返回一堆值,而不是打印它们,这让我觉得很奇怪。如果一个函数返回了一些东西,我想知道它——让用户知道repl是个坏主意。Harlan的建议是可行的:用您不想向用户公开的值定义此值的类型作为字段,并自定义其打印,以便不打印您不想向用户显示的字段。

除了Harlan和Stefan所说的,让我分享ODBC.jl包中的一个示例。 与其他语言相比,我最喜欢Julia的一个特性是创建自定义类型非常简单,而且没有性能问题!。这里有一个自定义类型,Metadata,它只包含几个描述已执行查询的数据字段。这不一定需要它自己的类型,但它使它更方便地在函数之间传递所有这些数据,并允许通过重载Base.show函数自定义其输出格式

type Metadata
    querystring::String
    cols::Int
    rows::Int
    colnames::Array{ASCIIString}
    coltypes::Array{(String,Int16)}
    colsizes::Array{Int}
    coldigits::Array{Int16}
    colnulls::Array{Int16}
end
function show(io::IO,meta::Metadata)
    if meta == null_meta
        print(io,"No metadata")
    else
        println(io,"Resultset metadata for executed query")
        println(io,"------------------------------------")
        println(io,"Columns: $(meta.cols)")
        println(io,"Rows: $(meta.rows)")
        println(io,"Column Names: $(meta.colnames)")
        println(io,"Column Types: $(meta.coltypes)")
        println(io,"Column Sizes: $(meta.colsizes)")
        println(io,"Column Digits: $(meta.coldigits)")
        println(io,"Column Nullable: $(meta.colnulls)")
        print(io,"Query: $(meta.querystring)")
    end 
end
同样,这并没有什么特别之处,但说明了定义自定义类型并生成自定义输出是多么容易


干杯。

除了Harlan和Stefan所说的,让我来分享ODBC.jl包中的一个例子。 与其他语言相比,我最喜欢Julia的一个特性是创建自定义类型非常简单,而且没有性能问题!。这里有一个自定义类型,Metadata,它只包含几个描述已执行查询的数据字段。这不一定需要它自己的类型,但它使它更方便地在函数之间传递所有这些数据,并允许通过重载Base.show函数自定义其输出格式

type Metadata
    querystring::String
    cols::Int
    rows::Int
    colnames::Array{ASCIIString}
    coltypes::Array{(String,Int16)}
    colsizes::Array{Int}
    coldigits::Array{Int16}
    colnulls::Array{Int16}
end
function show(io::IO,meta::Metadata)
    if meta == null_meta
        print(io,"No metadata")
    else
        println(io,"Resultset metadata for executed query")
        println(io,"------------------------------------")
        println(io,"Columns: $(meta.cols)")
        println(io,"Rows: $(meta.rows)")
        println(io,"Column Names: $(meta.colnames)")
        println(io,"Column Types: $(meta.coltypes)")
        println(io,"Column Sizes: $(meta.colsizes)")
        println(io,"Column Digits: $(meta.coldigits)")
        println(io,"Column Nullable: $(meta.colnulls)")
        print(io,"Query: $(meta.querystring)")
    end 
end
同样,这并没有什么特别之处,但说明了定义自定义类型并生成自定义输出是多么容易


干杯。

我想我在原来的帖子中没有说清楚。我的意思是更好的格式和向输出中添加额外的信息。例如,上面的函数输出基于修剪平均值的置信区间、修剪样本平均值等。我希望输出显示类似CI:123234;平均值:100;检验统计量:4.323;p=0.000123。我基本上需要输出更多的信息。如果我先打印值,然后返回所有值,我会在屏幕上打印两次值。我认为我在我的原始帖子中没有说清楚。我的意思是更好的格式和向输出中添加额外的信息。例如,上面的函数输出基于修剪平均值的置信区间、修剪样本平均值等。我希望输出显示类似CI:123234;平均值:100;检验统计量:4.323;p=0.000123。我基本上需要输出更多的信息。如果我先打印值,然后返回所有值,我会在屏幕上打印两次值。