gpt4 book ai didi

julia - 非标准字符串文字如何避免标准字符串文字生成的语法错误?

转载 作者:行者123 更新时间:2023-12-02 00:37:01 26 4
gpt4 key购买 nike

基于relevant section根据 Julia 文档,我的理解是像 foo"hello, world" 这样的非标准字符串文字相当于显式调用相应的宏:@foo_str("hello, world") 。然而,一定还有一些我不明白的额外魔法。考虑日期格式dateformat"\m""\m" 本身会引发语法错误:

julia> "\m"
ERROR: syntax: invalid escape sequence

如果我调用 @dateformat_str("\m") ,则会引发相同的语法错误,因为字符串文字 "\m" 似乎已被评估或错误在传递给宏之前进行检查:

julia> using Dates

julia> @dateformat_str("\m")
ERROR: syntax: invalid escape sequence

但是,使用非标准字符串文字是可行的:

julia> dateformat"\m"
dateformat"\m"

这是违反直觉的,因为我认为 dateformat"\m" 相当于 @dateformat_str("\m")。非标准字符串文字如何避免标准字符串文字产生的语法错误?

最佳答案

简而言之,因为解析器会识别这种情况并以不同的方式解析字符串文字

对于字符串宏调用it does this 。调用:parse-raw-literal

对于普通字符串文字来说 it does this 。调用parse-string-literal

<小时/>另一方面,

@dateformat_str("\m") 解析为普通字符串文字上的宏调用。所以它使用了后面的parse-string-literal,这会出错。

请注意,解析它的人已将字符串解析为转义为 "\\m"

julia> dump(:(dateformat"\m"))
Expr
head: Symbol macrocall
args: Array{Any}((3,))
1: Symbol @dateformat_str
2: LineNumberNode
line: Int64 1
file: Symbol REPL[6]
3: String "\\m
<小时/>

相关的兴趣是原始字符串宏,它根本不执行任何操作,但仍将使用 parse-raw-literal 进行字符串解析它基本上定义为

macro raw_str(s)
return s
end

关于julia - 非标准字符串文字如何避免标准字符串文字生成的语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58107022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com