如何使用 ASCIIString 替代来运行 Julia 0.4 代码?

问题描述 投票:0回答:1

我正在 Julia 中测试 Remez 库,但遇到了一些障碍。我想构建用 Julia 0.4 编写的原始 ARM 参考代码,同时对其进行尽可能少的更改。但用户界面完全打败了我,因为它使用 ASCIIString 的方式我似乎无法通过任何明智的方法来复制或解析。

我查看了这里的线程,大多数(2015 年之前)谈论 ASCIIString 仍然存在。然后它进入了 LegacyStrings,现在却无处可去。我还没有找到合适的解决方法的描述,而且我对 Julia 的了解仍然很差,所以我需要一些帮助。我在这里能找到的最接近的是这个线程,它足够旧,ARGS 是 ASCIIStrings 类型。我在其他地方找到了尝试 LegacyStrings 的建议,但这也不起作用(相同的错误消息):(

我真正想要的是某种方法来声明一个空字符串数组,以便原始 ARM 代码的其余部分可以按照预期的方式从命令行查看其参数。令人烦恼的是,我使用的 Julia 编辑器仍然认为 ASCIIString 是有效的关键字:(

我尝试将其声明为 String、AbstractString、Array、AbstractArray 和其他各种类型,但没有任何乐趣。编译器的有用建议显然是无意义的。我在这里只见树木不见森林。我是 Julia 的新手(大约有 2 周的经验),所以我应该在这里做什么可能是非常明显的,但我就是看不到它!

argwords = Array(ASCIIString, 0)  ## this line fails to compile
for arg = ARGS
  if doing_opts && beginswith(arg, "-")
    if arg == "--"
        doing_opts = false
[snip]
        else
           error("unrecognised option: ", arg)
        end
   else
        push!(argwords, arg)   ## saves them for later access by main code
   end
end
# compiler output Julia v1.9.3
# ERROR: LoadError: MethodError: no method matching Array(::Type{ASCIIString}, ::Int64)
# Closest candidates are:
# Array(::LinearAlgebra.UniformScaling, ::Integer, ::Integer)

原来是ASCIIString。然后我尝试了 LegacyStrings,但它不再提供使用此类声明的兼容方式。请给我一些建议,以进行最小的更改,以使此代码在 v1.9.3 中编译而不会出现错误?

arrays string julia legacy-code
1个回答
0
投票

这里改变的是数组创建语法——在REPL中查找

?Array
,可以看到:

Array{T}(undef, dims)

Array{T,N}(undef, dims)

构造一个未初始化的

N
Array
,其中包含以下元素 输入
T
。 [...]
dims
可以是一个元组或一系列整数参数 对应于每个维度的长度。

在您的情况下,我们希望类型 T 为

String
,并且只有一维长度(初始)为 0,因此我们可以将其写为
Array{String}(undef, 0)

julia> Array{String}(undef, 0)
String[]

该输出向您展示了一种更简单的编写方法:只需

argwords = String[]
即可创建您想要的
Array
的空
String

© www.soinside.com 2019 - 2024. All rights reserved.