Nim 隱式型別轉換

2021-08-27 16:26:11 字數 1233 閱讀 2289

作為乙個靜態語言,變數之間的賦值必須要保持型別一致

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) # 傳參時發生了隱式轉換

參考:

隱式型別轉換

c 本身對內建型別定義了各種隱式的型別轉換,這種內建的型別轉換在可能導致精度 丟失的情況下編譯器會發出警告,但當我們定義自己的型別時,提供各種隱式轉換往往 是弊大於利的 至少在我編寫過的 中很少用到 隱式的型別轉換可分為 其它型別到本型別,本型別到其它型別兩種.第一種通過單變數 可呼叫之建構函式進行...

隱式型別轉換

c語言中有以下四種情況會進行隱式轉換 1 算術運算子中,低型別轉換為高型別。2 賦值表示式中,右邊表示式的值自動隱式轉換為左邊變數的型別,並賦值。3 函式呼叫傳遞引數時,系統將實參轉換為形參的型別後,賦給形參。4 函式有返回值是,系統將表達值型別轉換為返回值型別。進行算術運算時,不同型別的數必須轉換...

隱式型別轉換

1.c的整型算數運算總是至少以預設型型別的精度來進行的。為了獲得這個精度,表示式的字元和短整型運算元在使用之前被轉換為普通整型,這種轉換叫 整型提公升 下面我們來看個例子 char a 2 char b 127 char c a b 求c 多少?首先char為1個位元組 而且是有符號的 char最大...