这应该很容易,但我不明白为什么下面的测试失败了......我预料到欢呼!\currentchar
当计数达到90(即的字符代码)时打印Z
。
肯定是某个地方存在扩展问题,但我相信我\expandafter
在这里使用 as 是必要的。我做错了什么?我应该采取不同的方法吗?
\def\mysteryletter{Z}
% loop through A-Z to find out the mystery letter
\newcount\currentchar
\currentchar=65 % <-- charcode of A
\loop
\edef\temp{\char\currentchar}
\temp
\expandafter\expandafter\expandafter\ifx\expandafter\mysteryletter\temp Hurrah!\fi
\advance \currentchar by 1
\unless\ifnum \currentchar>90
\repeat
\bye
答案1
添加
> \show\temp
您将会看到没有什么\edef
区别,也不可\char
扩展\currentchar
,因此\temp
每次都由这两个标记组成,并且永远不会\ifx
等于字符标记。
luatex 有一个可扩展的\Uchar
原语。
在这种情况下,测试字符代码比测试标记更容易。
\def\mysteryletter{Z}
% loop through A-Z to find out the mystery letter
\newcount\currentchar
\currentchar=65 % <-- charcode of A
\loop
\char\currentchar
\expandafter\ifnum\expandafter`\mysteryletter=\currentchar Hurrah!\fi
\advance \currentchar by 1
\unless\ifnum \currentchar>90
\repeat
\bye
答案2
\chardef\mysteryletter=`Z
% loop through A-Z to find out the mystery letter
\newcount\currentchar
\currentchar=`A
\loop
\chardef\temp=\the\currentchar
\temp
\ifx\mysteryletter\temp Hurrah!\fi
\advance \currentchar by 1
\unless\ifnum \currentchar>90
\repeat
\bye