在 Julia 中 big"123" 是宏、函数还是其他东西?
In Julia is big"123" a macro, function, or something else?
作为 2018 年 9 月这个月 Julia 的新手,我刚刚开始习惯最初不熟悉的宏符号“@”和“!”具有可变输入的函数的符号。我是否认为这些仅仅是供人类阅读的文体符号,它们并没有真正向编译器提供任何信息?
我在以下代码的上下文中提出这个问题,这些代码似乎与我所知道的 Julia 中的宏、函数或任何其他内容的样式不匹配。我在下面专门询问大“1234”:
julia> big"1234" # big seems to be neither a macro or a function.
1234
julia> typeof(big"1234")
BigInt
julia> typeof(BigInt(1234))
BigInt
我的问题是:big"1234"中的big是什么?
编辑:我想我根据 https://discourse.julialang.org/t/bigfloat-promotion-rules-and-constants-in-functions/14573/4
上的评论得到了答案
"请注意,因为十进制文字在解析时会转换为浮点数,BigFloat(2.1) 可能不会产生您期望的结果。您可能更喜欢通过解析或使用大字符串文字从字符串初始化常量。
julia> BigFloat(2.1)
2.100000000000000088817841970012523233890533447265625
julia> big"2.1"
2.099999999999999999999999999999999999999999999999999999999999999999999999999986"
因此,根据上面的评论,big in big"1234" 是 "big string literal."
编辑 2:以上是答案的开始,但下面接受的答案更完整。
这些是非标准字符串文字。他们告诉编译器 xyz"somestring"
应该通过名为 @xyz_str
.
的宏函数进行解析
BigFloat(2.1)
和 big"2.1"
之间的区别在于前者确实将 "numeric" 文字 2.1 的标准 Float64
表示形式转换为 BigFloat
但后者使用宏 @big_str
直接解析字符串 "2.1"
(不将其解释为数字文字)以计算 BigFloat 表示形式。
您还可以定义非标准字符串文字。 LaTeXStrings.jl
例如,使用它可以更轻松地输入 LaTeX 方程式。
请看:https://docs.julialang.org/en/v1/manual/metaprogramming/#Non-Standard-String-Literals-1
作为 2018 年 9 月这个月 Julia 的新手,我刚刚开始习惯最初不熟悉的宏符号“@”和“!”具有可变输入的函数的符号。我是否认为这些仅仅是供人类阅读的文体符号,它们并没有真正向编译器提供任何信息?
我在以下代码的上下文中提出这个问题,这些代码似乎与我所知道的 Julia 中的宏、函数或任何其他内容的样式不匹配。我在下面专门询问大“1234”:
julia> big"1234" # big seems to be neither a macro or a function.
1234
julia> typeof(big"1234")
BigInt
julia> typeof(BigInt(1234))
BigInt
我的问题是:big"1234"中的big是什么?
编辑:我想我根据 https://discourse.julialang.org/t/bigfloat-promotion-rules-and-constants-in-functions/14573/4
上的评论得到了答案"请注意,因为十进制文字在解析时会转换为浮点数,BigFloat(2.1) 可能不会产生您期望的结果。您可能更喜欢通过解析或使用大字符串文字从字符串初始化常量。
julia> BigFloat(2.1)
2.100000000000000088817841970012523233890533447265625
julia> big"2.1"
2.099999999999999999999999999999999999999999999999999999999999999999999999999986"
因此,根据上面的评论,big in big"1234" 是 "big string literal."
编辑 2:以上是答案的开始,但下面接受的答案更完整。
这些是非标准字符串文字。他们告诉编译器 xyz"somestring"
应该通过名为 @xyz_str
.
BigFloat(2.1)
和 big"2.1"
之间的区别在于前者确实将 "numeric" 文字 2.1 的标准 Float64
表示形式转换为 BigFloat
但后者使用宏 @big_str
直接解析字符串 "2.1"
(不将其解释为数字文字)以计算 BigFloat 表示形式。
您还可以定义非标准字符串文字。 LaTeXStrings.jl
例如,使用它可以更轻松地输入 LaTeX 方程式。
请看:https://docs.julialang.org/en/v1/manual/metaprogramming/#Non-Standard-String-Literals-1