Parsing Julia-为另一个函数的输入指定参数

Parsing Julia-为另一个函数的输入指定参数,parsing,arguments,julia,precision,Parsing,Arguments,Julia,Precision,我知道在Julia中我可以进行解析(BigFloat,x)其中x可能是字符串或readline()的结果。但是,如果我想在parse函数中为我的BigFloat指定一个精度,该怎么办 就像你可以做的BigFloat(pi,精度=50) 我相信这可以推广到将一个函数、一个构造函数或一个类型放入另一个函数中,并希望指定前一个函数的参数的情况。对于一般构造函数和解析,没有解决方案,因为解析可能需要使用实现细节。但是由于BigFloat实现者已经看到了这个用例,因此有一种方法可以让构造函数获取Abstr

我知道在Julia中我可以进行
解析(BigFloat,x)
其中
x
可能是字符串或
readline()
的结果。但是,如果我想在
parse
函数中为我的
BigFloat
指定一个精度,该怎么办

就像你可以做的
BigFloat(pi,精度=50)


我相信这可以推广到将一个函数、一个构造函数或一个类型放入另一个函数中,并希望指定前一个函数的参数的情况。

对于一般构造函数和解析,没有解决方案,因为解析可能需要使用实现细节。但是由于
BigFloat
实现者已经看到了这个用例,因此有一种方法可以让构造函数获取
AbstractString
和精度:

julia> BigFloat("3.141592653589793238462643383279502884197169399375105820974944592307816406286198")
3.141592653589793238462643383279502884197169399375105820974944592307816406286198

julia> BigFloat("3.141592653589793238462643383279502884197169399375105820974944592307816406286198", precision = 50)
3.1415926535897931

julia> parse(Float64, "3.141592653589793238462643383279502884197169399375105820974944592307816406286198")
3.141592653589793
你想象的一般化也是不可能的;我认为你有一个误解。
parse
的第一个参数不是可调用对象,而是仅用于分派的类型。因此,您不能通过传递匿名函数来绕过构造:

julia> parse(f -> BigFloat(f, precision=50),  "3.141592653589793238462643383279502884197169399375105820974944592307816406286198")
ERROR: MethodError: no method matching parse(::var"#1#2", ::String)
Closest candidates are:
  parse(::Type{T}, ::AbstractString; base) where T<:Integer at parse.jl:237
  parse(::Type{T}, ::AbstractString; kwargs...) where T<:Real at parse.jl:376
  parse(::Type{T}, ::AbstractString) where T<:Complex at parse.jl:378
  ...
Stacktrace:
 [1] top-level scope at REPL[10]:1
julia>parse(f->BigFloat(f,精度=50),“3.141592653589793238462643383279502884197169399375105820974944592307816406286198”)
错误:MethodError:没有与解析匹配的方法(::var“#1#2”,::String)
最接近的候选人是:

解析(::Type{T},::AbstractString;base),其中T感谢您提供完整的答案:)