關於 (int) (float) ... 等用法 - 聖殿英雄傳說 MUD

Mary avatar
By Mary
at 2018-06-24T09:44

Table of Contents

mud 板 typers 板友有貼文,原文

┌─────────────────────────────────────┐
│ 文章代碼(AID): #1RBSlxn9 (mud) [ptt.cc] [請益] LPC 數值轉型 │
│ 文章網址: https://www.ptt.cc/bbs/mud/M.1529727995.A.C49.html
└─────────────────────────────────────┘

大意是,如果把以下的 code 貼到running 去跑的話:

// int i 在 running code 預設為已宣告
if(1)
{
float f=3.14;

i=(int)f;

if(intp(i))
write("i 是整數.\n");
else if(floatp(i))
write("i 是浮點數.\n");
else
write("i 是其它型態.\n");
}

執行結果:

========== 程式執行區 ==========
i 是浮點數.
========== 程式執行區 ==========


也就是說,看起來,(int) 的動作並非表面地把它後面接的
東西強制變成整數型態,而是實際上比方阿銀跟伊莉莎白站
在一起時,我們原本能區分他們的不同(兩者是不同型態),
而 (int)阿銀這個動作就類似把伊莉莎白裝套在阿銀身上,
這時阿銀的型態就會被視為是伊莉莎白,使 i = (int)阿銀
這樣的程式段不會出 error。

(各位可想成若 i = f 就會出 error, i = (int)f 則不會)

但是實際上它做的事情,是把伊莉莎白變成了阿銀。

(即 i 變成了 f,這裡是指等號兩邊都接變數時)

那為啥這樣寫不會出問題? 因為實際上我們很少把一個已經
宣告為 float 的 "變數" 再用其它型態的變數去 = 它,我
們通常是這樣做:

int lv = (int)ppl->query("level");
string names = (string)ppl->query("name");
mapping data = (mapping)ppl->query("guild");

也就是說通常我們用到的場合,等號後面接的是一個讀取值
的動作,而不是一個明確的宣告變數。

但大家仍要注意,它可能會有 bypass 某些 error 產生的情
況,既然是 error 就應該被呈現出來而不是被忽略無視。

之所以不說"看起來等號後面的動作會變更等號前面的變數型
態",是因為底下的 running code:

i=(int)me->query("xxxxx"); // 實際上讀出的值為 null
if(intp(i)) write("i 是整數.\n");
else write("i 是其它型態.\n");

========== 程式執行區 ==========
i 是整數.
========== 程式執行區 ==========

若按照上面的說法,則 i 應該是其它型態,值應該是 null。


Laechan

--
Tags: 線上

All Comments

Oscar avatar
By Oscar
at 2018-06-29T09:42
LPC 並沒有 null 這種東西, 上述的
Steve avatar
By Steve
at 2018-07-04T09:41
i=(int)me->query("xxxxx"); 實際會回傳 0
Poppy avatar
By Poppy
at 2018-07-09T09:40
這個 0 比較特別,在 intp 跟 undefinedp 都會回傳 1
Connor avatar
By Connor
at 2018-07-14T09:38
跟直覺的想法都不太一樣呢(笑
David avatar
By David
at 2018-07-19T09:37
嘛我的意思就是比方被 undefinedp 回傳為 1 的情況

TiZi、WooHyaL加入OC隊伍XL2

Catherine avatar
By Catherine
at 2018-06-24T08:52
早前正式由London Spitfire釋出合約的兩位選手TiZi和WooHyaL今日剛公開了最新動向 https://twitter.com/XL2/status/1010599557758152704 https://i.imgur.com/i7fBbdN.jpg 兩人將一起加入NYXL學院隊XL2 A ...

しゃどばすチャンネルSP第8回 巫/皇傳說

Barb Cronin avatar
By Barb Cronin
at 2018-06-24T07:05
※ 引述《harrychang (修明‧莫忘初衷)》之銘言: : 情報來源:https://twitter.com/shadowverse_jp/status/1009754354734133249 : YouTube:https://youtu.be/6d9opFrac6M : OPENREC.tv:htt ...

kabaji 單排補位爬分台D6 往宗師邁進!

Freda avatar
By Freda
at 2018-06-24T01:22
實況網址:https://www.twitch.tv/kabajiow 實況主ID:KabajiOW 簡介: Day6 Phildephia Fusion旗下 奧地利實況主 kabaji 正在用全新空帳號 從預選賽打到前五百 全程補位 教學台 目前3818開局 快速上升中 今天有望衝擊4000+宗師 要 ...

IDDQD終獲解放,得以開口:“保持耐心,

Eartha avatar
By Eartha
at 2018-06-24T00:11
IDDQD終獲解放,得以開口:“保持耐心,你的時代會來臨的”(一) 在第四階段第五週The Game Haus最後一次的採訪裡,我們與傳奇輸出位明星選手Andr “ IDDQD” Dahlström以及舊金山震動隊的主教練Dae-hee “Crusty” Park一同坐下討論 。本次採訪內容很多,十分精彩, ...

2nd Anniversary人氣主戰者投票詳細票數

Brianna avatar
By Brianna
at 2018-06-23T22:50
妖精:卡西歐佩亞13萬7203票 ,美女與野獸8萬5858票 ,世界樹5萬1916票 皇家:黑劍梅麗莎12萬2491票 ,尖刃刺鼠6萬4194票 ,灰姑娘4萬4797票 法師:奧茲13萬9432票 ,馬納歷亞6萬1853票 ,雪人大王5萬1540票 龍騎:銀冰14萬2352票 ...