在朱莉娅是一个巨大的"123"宏观,功能还是其他什么?

Jul*_*ner 0 arbitrary-precision julia

作为Julia的新人,本月,即2018年9月,我刚刚习惯了最初不熟悉的"@"符号表示宏和"!" 具有可变输入的函数的符号.我是否正确地认为这些仅仅是人类阅读的风格符号,而且他们并没有真正向编译器提供任何信息?

我在以下代码的上下文中提到这一点,这些代码似乎与我所知道的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
Run Code Online (Sandbox Code Playgroud)

我的问题是:什么是大"1234"?

编辑:我想我的答案基于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"
Run Code Online (Sandbox Code Playgroud)

因此,基于上述评论,大"1234"中的大字是"大字符串字面".

编辑2:以上是答案的开始,但下面接受的答案要完整得多.

hck*_*ckr 5

这些是非标准字符串文字.它们告诉编译器xyz"somestring"应该通过名为的宏函数进行解析@xyz_str.

BigFloat(2.1)和之间的区别在于big"2.1"前者确实将Float64"数字"文字2.1 的标准表示转换为, BigFloat但后者"2.1"直接解析字符串(不将其解释为数字文字)与宏@big_str来计算BigFloat表示.

您还可以定义非标准字符串文字.LaTeXStrings.jl例如,使用它来更容易键入LaTeX方程.

请查看:https://docs.julialang.org/en/v1/manual/metaprogramming/#Non-Standard-String-Literals-1