@eval 在@testset 名称参数中转义 $
@eval escapes $ in @testset name argument
我在一个文件中有几个 @testset
,我想对齐它们的输出。
一开始看起来像这样:
Test Summary: | Pass Total
short | 1 1
Test Summary: | Pass Total
test with longer name | 1 1
我希望 |
对齐,这样就可以了:
Test Summary: | Pass Total
short | 1 1
Test Summary: | Pass Total
test with longer name | 1 1
我尝试使用 @sprintf
使名称长度相同,但 @testset
宏需要一个字符串文字。所以我使用 @eval
将格式化字符串插入到名称中:
testName(name) = @sprintf("%-25s", name)
@eval begin
@testset $(testName("short")) begin
@test true
end
@testset $(testName("test with longer name")) begin
@test true
end
end # @eval
这给了我想要的简单测试集,但达不到 for
循环变量插入到名称中。
如果我添加这样的测试:
@testset $(testName("some for test $i")) for i in 9:11
@test i > 0
end
输出是
Test Summary: | Pass Total
short | 1 1
Test Summary: | Pass Total
test with longer name | 1 1
Test Summary: | Pass Total
some for test $i | 1 1
Test Summary: | Pass Total
some for test $i | 1 1
Test Summary: | Pass Total
some for test $i | 1 1
看起来 eval 宏以某种方式转义了 $
,它不再适用于 @testset
宏。
为什么它不起作用,我如何强制 $
在名称字符串文字中不转义地存在? (也欢迎就如何对齐结果提出建议)。
使用 String
和插值作为 @testset
宏的参数:
julia> @testset "$(testName("some for test $i"))" for i in 9:11
@test i > 0
end;
Test Summary: | Pass Total
some for test 9 | 1 1
Test Summary: | Pass Total
some for test 10 | 1 1
Test Summary: | Pass Total
some for test 11 | 1 1
我在一个文件中有几个 @testset
,我想对齐它们的输出。
一开始看起来像这样:
Test Summary: | Pass Total
short | 1 1
Test Summary: | Pass Total
test with longer name | 1 1
我希望 |
对齐,这样就可以了:
Test Summary: | Pass Total
short | 1 1
Test Summary: | Pass Total
test with longer name | 1 1
我尝试使用 @sprintf
使名称长度相同,但 @testset
宏需要一个字符串文字。所以我使用 @eval
将格式化字符串插入到名称中:
testName(name) = @sprintf("%-25s", name)
@eval begin
@testset $(testName("short")) begin
@test true
end
@testset $(testName("test with longer name")) begin
@test true
end
end # @eval
这给了我想要的简单测试集,但达不到 for
循环变量插入到名称中。
如果我添加这样的测试:
@testset $(testName("some for test $i")) for i in 9:11
@test i > 0
end
输出是
Test Summary: | Pass Total
short | 1 1
Test Summary: | Pass Total
test with longer name | 1 1
Test Summary: | Pass Total
some for test $i | 1 1
Test Summary: | Pass Total
some for test $i | 1 1
Test Summary: | Pass Total
some for test $i | 1 1
看起来 eval 宏以某种方式转义了 $
,它不再适用于 @testset
宏。
为什么它不起作用,我如何强制 $
在名称字符串文字中不转义地存在? (也欢迎就如何对齐结果提出建议)。
使用 String
和插值作为 @testset
宏的参数:
julia> @testset "$(testName("some for test $i"))" for i in 9:11
@test i > 0
end;
Test Summary: | Pass Total
some for test 9 | 1 1
Test Summary: | Pass Total
some for test 10 | 1 1
Test Summary: | Pass Total
some for test 11 | 1 1