https://zhuanlan.zhihu.com/p/711325333
接上文
在仓颉编程语言库 API 文档里找线索,搜 string 仅有 stringReader/Writer
再搜 int,看到 BigInt 示例里:let int = BigInt("-123456")
于是试试:let sint = Int("123")
报错:
error: no matching function for operator '()' function call
==> tests/int.cj:5:20:
|
5 | let sint = Int("123")
| ^
如果用 Int64,还是见过的错误:
error: the expression for numeric type conversion must have a numeric type
==> tests/int.cj:5:26:
|
5 | let sint = Int64("123")
如果用 BigInt 比较整数呢?那样可以把字符串转为 BigInt 再比较。
error: cannot convert an integer literal to type 'Struct-BigInt'
==> tests/int.cj:8:29:
|
8 | println(int.compare(1))
还有啥办法?std库逐个看过去,发现 std.convert !!例程里有:
println("After the conversion of parse, \"-9223372036854775808\" became ${Int64.parse(strInt64_parse)}")
马上试:
let i = Int64.parse("23")
还是报错:
error: undeclared identifier 'parse'
==> tests/int.cj:9:23:
|
9 | let i = Int64.parse("23")
| ^^^^^
需导入此库:import std.convert.*
,运行通过。这时发现上一篇试过 Int64.parse
,但就是未导入库。
回头看,api文档仅提供了在文档标题中搜索的功能。要是可以将报错信息和api文档全文搜索结合起来,也许可以方便用户。《一站式 IDE》 提到过:
在开发全过程中,对各种报错警告信息都可以指向相关的知识点、例程、或是他人提过的问题和解决方法(如何集成论坛或是问题追溯平台功能另行讨论)。
完成:
import std.console.*
import std.random.*
import std.math.*
import std.convert.*
main() {
let 想的 = abs(Random().nextInt64()%50)
while(true) {
let 猜的 = Int64.parse(Console.stdIn.readln() ?? "")
if (猜的 > 想的) {
println("大了")
} else if (猜的 < 想的) {
println("小了")
} else {
println("${猜的} 中了!")
break
}
}
}