版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aqtata/article/details/82563557
作为一个静态语言,变量之间的赋值必须要保持类型一致
proc say(s: string): string =
result = "Hi: " & s
var n = 10
echo say(n)
显然say方法接受一个string类型,你不可以传递int类型进去,需要先进行转换后再调用,像这样
import strutils
proc say(s: string): string =
result = "Hi: " & s
var n = 10
echo say(intToStr(n))
(intToStr是借鉴自Delphi的)
还有个方法就是利用函数重载,这种方法在其他一些语言中比较常见
import strutils
proc say(s: string): string =
result = "Hi: " & s
proc say(n: int): string =
result = say(intToStr(n))
var n = 10
echo say(n)
而在Nim中,可以利用converter关键字来编写转换逻辑
import strutils
converter toStr(val: int): string = intToStr(val)
proc say(s: string): string =
result = "Hi: " & s
var n = 10
echo say(n) # 传参时发生了隐式转换
其中,转换器的名字"toStr"是用不到的,只是方便知道这个转换器的作用。
如果同时有两个以上的同类型转换器,则第一个生效
import strutils
converter toStr2(val: int): string = "55"
converter toStr(val: int): string = intToStr(val) # 未使用
proc say(s: string): string =
result = "Hi: " & s
var n = 10
echo say(n) # 传参时发生了隐式转换
参考:
https://nim-lang.org/docs/macros.html#statements-converter-declaration