【发布时间】:2018-09-12 20:59:28
【问题描述】:
作为 2018 年 9 月这个月的 Julia 新手,我刚刚习惯了最初不熟悉的用于宏的“@”符号和“!”具有可变输入的函数的符号。我是否可以假设这些只是供人类阅读的风格符号,并且它们并没有真正向编译器提供任何信息?
我在以下代码的上下文中提出了这一点,该代码似乎与我所知道的 Julia 中的宏、函数或其他任何东西的样式不匹配。我在下面专门询问 big"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”中有什么大的?
编辑:我想我的答案是基于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" 是一个“大字符串文字”。
编辑2:以上是答案的开始,但下面接受的答案要完整得多。
【问题讨论】:
-
另外,'@' 不是风格选择,afaik。 @ 被解释器/编译器发现,并且该对象被解释为宏。另外,我不会打电话给'!这也是一种风格选择,这是一个强烈鼓励的命名约定,因为没有其他方法可以传达函数是否改变其参数的重要信息。
-
@TasosPapastylianou,感谢您的澄清。