AnyMath 文档

[医]银器

参数处理

ArgRead = Union{AbstractString, AbstractCmd, IO}

[医]阿格瑞德 类型是类型的联合 arg_read 函数知道如何转换成可读的IO句柄。 见 arg_read详情。

ArgWrite = Union{AbstractString, AbstractCmd, IO}

[医]写 类型是类型的联合 arg_write 函数知道如何转换成可写IO句柄,除了 什么都没有 其中 arg_write 通过生成临时文件来处理。 见 arg_write详情。

arg_read(f::Function, arg::ArgRead) -> f(arg_io)

arg_read 函数接受参数 arg,arg 这可以是其中的任何一个:

* 抽象字符串:要打开读取的文件路径 * [医]抽象:要运行的命令,从其标准输出读取 * 伊俄:一个开放的IO句柄从读取

体是否正常返回或抛出错误,打开的路径将在返回之前关闭 arg_read 和一个 伊俄 在返回之前,句柄将被刷新,但不会关闭 arg_read.

注意:打开文件时,ArgTools将通过 锁=错误 到文件 打开(。..) 打电话。 因此,此函数返回的对象不应从多个线程中使用。 将来可能会放宽此限制,这不会破坏任何工作代码。

arg_write(f::Function, arg::ArgWrite) -> arg
arg_write(f::Function, arg::Nothing) -> tempname()

arg_write 函数接受参数 arg,arg 这可以是其中的任何一个:

* 抽象字符串:要打开写入的文件路径 * [医]抽象:要运行的命令,写入其标准输入 * 伊俄:要写入的开放IO句柄 * 什么都没有:临时路径应写入

如果主体正常返回,则打开的路径将在完成后关闭;IO句柄参数保持打开状态,但在返回之前刷新。 如果论点是 什么都没有 然后打开一个临时路径进行写入和关闭打开完成,并从返回路径 arg_write. 在所有其他情况下, arg,arg 本身被返回。 这是一个有用的模式,因为无论参数是否通过,您都可以始终如一地返回所写的内容。

如果在体的评估过程中出现错误,由打开的路径 arg_write 对于写入将被删除,无论是作为字符串传入还是在 arg,arg什么都没有.

注意:打开文件时,ArgTools将通过 锁=错误 到文件 打开(。..) 打电话。 因此,此函数返回的对象不应从多个线程中使用。 将来可能会放宽此限制,这不会破坏任何工作代码。

arg_isdir(f::Function, arg::AbstractString) -> f(arg)

阿尔吉斯迪尔 函数需要 arg,arg 它必须是现有目录的路径(否则会引发错误),并将该路径传递给 f 最后返回结果 f(arg). 这绝对是由提供的最不有用的工具 [医]银器 主要是为了对称而存在的。 arg_mkdir 并给出一致的错误消息。

arg_mkdir(f::Function, arg::AbstractString) -> arg
arg_mkdir(f::Function, arg::Nothing) -> mktempdir()

arg_mkdir 函数需要 arg,arg 其中一个必须是:

*已存在的空目录的路径, *一个不存在的路径,可以创建为目录,或 * 什么都没有 在这种情况下,将创建一个临时目录。

在所有情况下,都会返回目录的路径。 如果期间发生错误 f(arg),该目录返回到其原始状态:如果它已经存在,但为空,它将被清空;如果它不存在,它将被删除。

功能测试

arg_readers(arg :: AbstractString, [ type = ArgRead ]) do arg::Function
    ## pre-test setup ##
    @arg_test arg begin
        arg :: ArgRead
        ## test using `arg` ##
    end
    ## post-test cleanup ##
end

arg_readers 函数接受一个要读取的路径和一个单参数do块,每个测试读取器类型调用一次 arg_read 能处理。 如果可选 类型 给出参数,然后do块只为产生该类型参数的读取器调用。

arg,arg 传递给do块的不是参数值本身,因为需要为每个测试用例初始化和最终确定一些测试参数类型。 考虑一个打开的文件句柄参数:一旦你将它用于一个测试,你就不能再次使用它;你需要关闭它并再次打开文件以进行下一个测试。 此功能 arg,arg 可以转换成一个 [医]阿格瑞德 实例使用 @arg_test arg开始。.. 结束.

arg_writers([ type = ArgWrite ]) do path::String, arg::Function
    ## pre-test setup ##
    @arg_test arg begin
        arg :: ArgWrite
        ## test using `arg` ##
    end
    ## post-test cleanup ##
end

arg_writers 函数接受一个do块,它对每个测试编写器类型调用一次 arg_write 可以处理一个临时的(不存在的) 路径arg,arg 它可以转换成各种可写参数类型,写入 路径. 如果可选 类型 给出参数,然后do块只为产生该类型参数的编写器调用。

arg,arg 传递给do块的不是参数值本身,因为某些测试参数类型需要为每个测试用例初始化和最终确定。 考虑一个打开的文件句柄参数:一旦你将它用于一个测试,你就不能再次使用它;你需要关闭它并再次打开文件以进行下一个测试。 此功能 arg,arg 可以转换成一个 [医]写 实例使用 @arg_test arg开始。.. 结束.

还有一个 arg_writers 采用路径名的方法,如 arg_readers:

arg_writers(path::AbstractString, [ type = ArgWrite ]) do arg::Function
    ## pre-test setup ##
    @arg_test arg begin
        # here `arg :: ArgWrite`
        ## test using `arg` ##
    end
    ## post-test cleanup ##
end

如果需要指定,此方法很有用 路径 而不是使用由 临时名称(). 自 路径 是从外面通过的 arg_writers,路径不是这种形式的do块的参数。

@arg_test arg1 arg2 ... body

@arg_test 宏用于转换 arg,arg 提供的功能 arg_readersarg_writers 成实际的参数值。 当你写 @arg_test arg身体 它相当于 arg(arg->身体).