【Nim】隐式类型转换

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/aqtata/article/details/82563557