如何明确指定字符文字
How to unambiguously specify a character literal
由于我一直在研究 "Rendezvous with Ada 95",所以我 运行 发现了一个看似常见的 Ada83 / Ada95 不兼容性:行中可怕的 ambiguous character literal
错误:
Put ( Disk < Screen and 'P' < 'B' );
我是 Ada 的新手,但不是强类型语言,我理解这个问题:无法确定文字是 Character
类型还是 Wide_Character
类型以及这种歧义导致编译时错误。
我的问题是,如何更改上面的语句以指定具有给定类型的字符文字(例如作为Character
或Wide_Character
)?我读过类似的问题 () and they don't provide any guidance beyond RTFM. Other references (https://gcc.gnu.org/onlinedocs/gnat_rm/Legal-Ada-83-programs-that-are-illegal-in-Ada-95.html) 显示字符范围的解决方法,但不是单个文字。
在另一种语言中,我希望将文字转换为给定类型,但我对 Ada 的印象是不鼓励绕过类型检查(应该?)。我知道我可以明确地将文字定义为给定类型的常量,但这似乎违背了在代码主体中允许文字的目的。
我认为这是对 Ada83 代码进行现代化改造时非常常见的问题;消除内联歧义字符文字歧义的最佳做法是什么?
使用 qualified expression 明确标识类型:
Put ( Disk < Screen and Character'('P') < Character'('B') );
由于我一直在研究 "Rendezvous with Ada 95",所以我 运行 发现了一个看似常见的 Ada83 / Ada95 不兼容性:行中可怕的 ambiguous character literal
错误:
Put ( Disk < Screen and 'P' < 'B' );
我是 Ada 的新手,但不是强类型语言,我理解这个问题:无法确定文字是 Character
类型还是 Wide_Character
类型以及这种歧义导致编译时错误。
我的问题是,如何更改上面的语句以指定具有给定类型的字符文字(例如作为Character
或Wide_Character
)?我读过类似的问题 (
在另一种语言中,我希望将文字转换为给定类型,但我对 Ada 的印象是不鼓励绕过类型检查(应该?)。我知道我可以明确地将文字定义为给定类型的常量,但这似乎违背了在代码主体中允许文字的目的。
我认为这是对 Ada83 代码进行现代化改造时非常常见的问题;消除内联歧义字符文字歧义的最佳做法是什么?
使用 qualified expression 明确标识类型:
Put ( Disk < Screen and Character'('P') < Character'('B') );