18岁成人毛片_第四色在线视频_国产又粗又硬视频_99热这里只有精品3_亚洲国产无线乱码在线观看 _中文字幕乱码在线观看_男人草女人视频_国产伦精品一区二区三区视频痴汉_妞干网这里只有精品_久草视频免费在线

極客小將

您現在的位置是:首頁 » scratch編程資訊

資訊內容

一把雙刃劍:Scratch數據類型的隱式轉換

極客小將2020-11-17-
筆者曾經也寫過一篇關于數據類型的文章:《從數據類型到計算思維》,對
筆者曾經也寫過一篇關于數據類型的文章:《從數據類型到計算思維》,對upload/article/images/2020-11-17/616cacc510f35ef64e8d7a3bdafc3b75.jpg這個積木在數據類型不同的情況下的執行邏輯做了一個簡單匯總,并總結了一些規律。事實上,Scratch是一門弱數據類型的語言,不同于強類型語言在遇到函數引數類型和實際調用類型不匹配的情況經常會直接出錯或者編譯失敗,弱數據類型的語言會進行隱式轉換,有時會產生難以意料的結果。本文將在前篇《從數據類型到計算思維》的基礎上對Scratch數據類型隱式轉換問題進行補充、完善。

01

在前篇從數據類型到計算思維》中,通過幾個簡單的測試,總結了幾條upload/article/images/2020-11-17/616cacc510f35ef64e8d7a3bdafc3b75.jpg積木在不同數據類型情況下執行邏輯的規律。

源碼佐證:

_setCostume (target, requestedCostume, optZeroIndex) {if (typeof requestedCostume === 'number') {// Numbers should be treated as costume indices, alwaystarget.setCostume(optZeroIndex ? requestedCostume : requestedCostume - 1);} else {// Strings should be treated as costume names, where possibleconst costumeIndex = target.getCostumeIndexByName(requestedCostume.toString());

數字類型的參數被當做造型編號來執行,字符類型的參數被當做造型名稱來執行(前提是有對應的造型名稱時)

if (costumeIndex !== -1) {target.setCostume(costumeIndex);} else if (requestedCostume === 'next costume') {target.setCostume(target.currentCostume + 1);} else if (requestedCostume === 'previous costume') {target.setCostume(target.currentCostume - 1);// Try to cast the string to a number (and treat it as a costume index)// Pure whitespace should not be treated as a number// Note: isNaN will cast the string to a number before checking if it's NaN} else if (!(isNaN(requestedCostume) || Cast.isWhiteSpace(requestedCostume))) {target.setCostume(optZeroIndex ? Number(requestedCostume) : Number(requestedCostume) - 1);}

字符類型的參數會被優先“嘗試”轉換為數字類型,并作為造型編號執行。

upload/article/images/2020-11-17/616cacc510f35ef64e8d7a3bdafc3b75.jpg只是諸多會對數據類型進行自動轉換的積木之一,也是在使用時最容易出BUG、最具代表性的積木。幾乎所有積木都會對數據類型進行自動轉換,有的甚至對輸入的數據類型做了限制,如,無法直接在upload/article/images/2020-11-17/2c4fb20b280a4bcc061c1b8b01cf066a.jpg積木中輸入字符。

有的積木保是有自己的關鍵詞的,如upload/article/images/2020-11-17/616cacc510f35ef64e8d7a3bdafc3b75.jpg,可以通過給變量賦值“previous costume”而實現“上一個造型”的效果。還有在《Scratch3.0的十宗罪》中提到的在Sc3.0中訪問列表末項、隨機項的方法。upload/article/images/2020-11-17/9b4dd5036c334b163990dfffda5c1f5b.jpg本身是允許輸入數字類型的。但是通過變量賦值、或是在中文輸入法下拼寫完整單詞直接敲入,可以強行輸入字符類型的關鍵詞,如“all”、“any”、“last”、“random”,實現直接訪問指定項的效果。 if (typeof index !== 'number') {if (index === 'all') {return acceptAll ? Cast.LIST_ALL : Cast.LIST_INVALID;}if (index === 'last') {if (length > 0) {return length;}return Cast.LIST_INVALID;} else if (index === 'random' || index === 'any') {if (length > 0) {return 1 + Math.floor(Math.random() * length);}return Cast.LIST_INVALID;}}

02

轉數字類型失敗

然而并不是所有積木都“幸運”地擁有關鍵詞的。那些沒有關鍵詞的、或者是參數不等于關鍵詞的,Scratch會如何處理呢? static toNumber (value) {// If value is already a number we don't need to coerce it with// Number().if (typeof value === 'number') {// Scratch treats NaN as 0, when needed as a number.// E.g., 0 + NaN -> 0.if (Number.isNaN(value)) {return 0;}return value;無法被轉換為數字類型的參數(即NaN),將會被轉換為0。有無數多的BUG都是因為這個原因而產生的,比如角色沒有移動到預期位置,卻總是在舞臺中央停滯不前。upload/article/images/2020-11-17/9aa34fdfc3d3b5565eb1ebe1f77aa7a4.jpg很有可能就是這兩個變量中的參數被轉為0了。這個例子更多的會發生在訪問列表的特定項時,索引越界,返回空字符,空字符被轉換為0,像這樣upload/article/images/2020-11-17/87efa9489ecbb67f69f157c397f44237.jpg。列表的問題足以新開一篇文章來探討,在此就不費過多筆墨了。

03

布爾值的規則

其實這個小節的主題才是筆者動筆寫這篇文章的主要動機。它來源于一位群友的問題。一個非常經典的問題。

upload/article/images/2020-11-17/1705ecee739e1f0eabded745650cb636.jpg

比較運算符的連續嵌套使用

初學者會這樣寫腳本的原因是將數學中的習慣帶到編程里來了(別問筆者是怎么知道的,問就是筆者也犯過相同的錯誤。。)乍一看好像沒有什么問題。但是要知道,程序是一步一步執行的,像這樣嵌套關系的積木,也是先執行上層的,再執行下層的(相當于數學中的括號)。3>2的結果是true(不打引號以區分字符類型),再比較true和1的大小。到這一步,不論接下去的結果如何,都應該能發現,和數學中連續比較的的3>2>1不一樣,這么寫是錯的,是肯定無法得到預期結果的。本著 Scratch 格物堂的“格物”精神,繼續往下看。true和1怎么比大???這還不簡單嗎?《Scratch 3.0的大小比較是如何進行的》一文中已經說得很清楚了,字符類型的數據在參與比較運算時,比較的是ASCII碼或者說是Unicode碼。而數字0的十進制編號是48,A是65,a是97。就算Scratch不區分大小寫,二十六個字母怎么的也是排在數字后面,字母是肯定大于數字的,“true”>1肯定是true。

upload/article/images/2020-11-17/b929132bf4b3cc3818a20243d8a9da7f.jpg

“true”>1

看似沒毛病

但是一運行整個腳本。。。

upload/article/images/2020-11-17/c83546e39ccf3ff1d2889ba6b69cec56.jpg

于是開始倒推哪個環節出了問題。

用《Debug in Scratch —— Part 1》中提到的“氣泡輸出法”進行排查:

upload/article/images/2020-11-17/db8e59d8548472e1583e8f747f09e082.jpg

曾經引以為傲的“氣泡輸出法”

upload/article/images/2020-11-17/778463de7f8ba6d807e60c962ba546ee.jpg

說“true”

還是沒問題

細心的讀者可能會發現,上文中的true,是什么時候被打上引號的?true在參與比較運算時,真的是“true”嗎?我們想當然地以為true被轉換成了字符類型。但是不是字符類型還能是什么?NaN,難道被轉成了0嗎?0>1的確是false沒錯,好像說通了。但是換幾個用例再次進行測試,發現結果又不太一樣。篇幅有限,不再進行引導。直接上測試印證猜測

測試1:

upload/article/images/2020-11-17/b7e06d1f684307bead7d056bd4aa8c6c.jpg

布爾類型(true)參數參與算術運算(+空字符)

測試2:

upload/article/images/2020-11-17/bc87633b9dcfb5ce2826caa649628583.jpg

布爾類型(false)參數參與算術運算(+空字符)

這兩個小測試足以證明,

true被轉換為數字類型時,會被轉換為1;false在被轉換為數字類型時,會被轉換為0.

在上文中的比較運算符的連續嵌套使用示例中,第二次其實是在比較1>1,結果自然是false了。至于為什么“氣泡輸出法”會失效,這是因為upload/article/images/2020-11-17/9d01d293ccb1dc07b54315f8e0d12b6e.jpg這類積木會將參數轉換為字符類型。


04

實例

也許使用布爾值參與比較運算的確實用價值不高,一般在案例實戰中不會這么用,僅僅需要了解其原因即可。但是筆者的的確確見過一種使用布爾值參與算術運算,巧妙利用數據類型隱式轉換這個特點的案例。下面和讀者朋友們分享一下。
一起盜竊案,有4名嫌疑人。這4人只有一名小偷。已知,這4名嫌疑人中,有且僅有1人在說謊。
首先用腳本把4個嫌疑人的供詞用邏輯表達式表示出來:

upload/article/images/2020-11-17/4f7c328046911755aeb7062f13a64a50.jpg

1號:“不是我?!?

upload/article/images/2020-11-17/9bb8019ad4f9935df8940362126f81f8.jpg

2號:“小偷是3號?!?

upload/article/images/2020-11-17/e442eca09ea2a9c5aece2d876ddfb3e5.jpg

3號:“小偷是4號?!?

upload/article/images/2020-11-17/86c1eeee9eda21550a560125aa6c9272.jpg

4號:“3號在說謊”


接著根據條件“4個嫌疑人中有且僅有1人在說謊”,可以推導出結論:以上4個邏輯表達式中,有3個是成立的,有1個是不成立的。再結合上文中get的新技能:布爾值在被轉換為數字類型時,true會被轉換為1,false會被轉換為0,不難得出以下結論:

upload/article/images/2020-11-17/965e80d91f833682a876abec6de72aea.jpg

4名嫌疑人中,有且僅有1人在說謊


最后要做的就只有一件事了:遍歷,從小偷=1開始,逐個驗證即可。篇幅有限,具體步驟就沒必要再細說了。
案例來源:《Scratch趣味編程進階》?作者:謝聲濤


05

總結

如果用哲學中的矛盾觀來分析數據類型的隱式轉換這個問題的話,積木本身的種類、本身的參數類型是主要矛盾,居于主導地位,它決定數據將會被轉換成什么類型;而參數的數據類型則是次要矛盾,位居從屬地位。如果積木本身的參數類型與實際參數類型不匹配,則會優先嘗試將其轉化為本身的參數類型,同時兼顧地“考慮”一下參數本身的“想法”,看看它是否“愿意”被轉換為那種類型,若“不愿意”,則另做打算(比如轉成0或者再比如upload/article/images/2020-11-17/616cacc510f35ef64e8d7a3bdafc3b75.jpg的復雜轉化邏輯)。
Scratch數據類型的隱式轉換這個問題,筆者秉持辯證的觀點來看待。首先這樣無疑對新手來說無疑是十分友好的,易上手。否則動不動地給你報個錯,如果對Scratch的數據類型不夠了解的話,幾乎解決不了。那么現有的教學知識體系中又要多一塊龐大卻又對邏輯思維能力的提升不大且極為枯燥的內容了,這絕對是在“勸退”初學者。另一個優點就是,只要你的想象力足夠豐富,就能利用這個特點做出精妙的案例(前提是你要清楚地知道自己在做什么)。

但是隱式轉換帶來的負面影響也同樣地明顯。相比強類型的語言,Scratch在數據類型這方面來說顯得不夠嚴謹。其次,和其他弱類型語言一樣,隱式轉換總是被打上“它們的存在將導致錯誤的發生”的標簽。一如上文中的3>2>1。Scratch數據類型隱式轉換所造成的BUG數不勝數,細分下去種類繁多。并且就像他的名字一樣,十分隱蔽,極難排查,即使像上文中那樣運用一般的debug方法,也很有可能會因為再次發生隱式轉換而失效。

聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除

預約試聽課

已有385人預約都是免費的,你也試試吧...

亚洲a∨无码无在线观看| 久久伊人成人网| 欧产日产国产69| 男女激情无遮挡| 性做久久久久久久| 亚洲国产一二三精品无码 | 九九热只有精品| 中文字幕一区二区久久人妻网站| 久草在在线视频| 国产精品无码久久久久久| 国产一区二区视频播放| 6—12呦国产精品| 国产在线免费av| 国产系列精品av| 久久精品一区二区三区四区五区| 日本网站在线看| 少妇一级淫片免费放播放| 日韩免费高清在线| 欧美特黄一级视频| 欧美日韩激情视频在线观看| 野花视频免费在线观看| 国产精品suv一区二区| 欧美日韩中文字幕视频| 欧美一级特黄视频| 97免费视频观看| 熟妇高潮精品一区二区三区 | 国产亚洲小视频| 中国黄色录像片| 91片黄在线观看喷潮| 黄色片久久久久| 亚洲AV成人无码网站天堂久久| 99精品在线视频观看| 国产高清av片| 无码黑人精品一区二区| 国模人体一区二区| 久久精品国产亚洲AV无码麻豆| 最新av网址在线观看| 日本少妇xxxx| 中文字幕精品一区二区精| 亚洲黄色av网址| 欧美激情图片小说| 天天躁日日躁狠狠躁免费麻豆| 中文字幕 人妻熟女| 国产999免费视频| 国产原创popny丨九色| 7788色淫网站小说| 国产精品欧美亚洲| 久久久国产欧美| 久久久精品少妇| 4438x全国最大成人| 97人妻一区二区精品免费视频| 国产男女无遮挡| 免费看av软件| 精品国产大片大片大片| 久久久久成人精品无码中文字幕| 99热这里只有精品9| 蜜臀尤物一区二区三区直播| 午夜激情视频网| 热久久精品免费视频| 日本免费网站视频| 中文字幕日韩三级片| 无码国产色欲xxxx视频| 精品久久久无码中文字幕| 激情文学亚洲色图| 亚洲天堂av线| 亚州精品一二三区| 欧美s码亚洲码精品m码| 国产a级片网站| 国产 欧美 日韩 一区| www欧美com| 精品国产视频在线观看| 蜜桃精品成人影片| 五月婷婷综合久久| 乱色精品无码一区二区国产盗| 99精品久久久久久中文字幕| 中文字幕视频在线播放| 成人毛片一区二区三区| 久操视频在线免费观看| 99超碰在线观看| 在线观看国产黄| 欧美日韩在线视频一区二区三区| 久久婷婷五月综合色国产香蕉| 九一国产精品视频| 人妻无码视频一区二区三区| 手机看片福利日韩| 国产亚洲视频一区| 911av视频| 久久精品国产亚洲AV无码麻豆| 日本特黄特色aaa大片免费| 五月天激情四射| 一本色道久久综合精品婷婷| 国产精品亚洲欧美在线播放| 97免费观看视频| 色呦呦中文字幕| 亚洲色偷偷色噜噜狠狠99网| 国产交换配乱淫视频免费| 欧美乱大交做爰xxxⅹ小说| 日本黄色播放器| 久久久久久久久久久99| av网站在线不卡| 91蜜桃视频在线观看| 亚洲最大成人av| 五月天激情婷婷| 好吊色视频一区二区三区| 国产aaaaaaaaa| 国产精品视频一二三四区| 99视频在线免费| 国产一级av毛片| 成人h动漫精品一区二区无码| 久久免费公开视频| 久久国产乱子伦免费精品| 四虎影院在线免费播放| 亚洲国产成人在线观看| theav精尽人亡av| 免费在线观看黄色小视频| 成人在线观看小视频| 三级网站在线看| 91导航在线观看| 亚洲不卡中文字幕无码| 中文字幕在线字幕中文| 日本免费网站在线观看| av资源在线免费观看| 男人操女人免费软件| 青娱乐国产精品视频| 99在线精品视频免费观看20| 国产精品一二三区在线观看| 成人一对一视频| 黄色片视频免费| 少妇精品无码一区二区三区| 免费在线观看视频a| 亚洲精品午夜久久久久久久| 欧美一级淫片免费视频魅影视频| 国产又粗又长免费视频| 一本久道综合色婷婷五月| 日本丰满少妇做爰爽爽| 制服丝袜第二页| 欧美精品久久久久久久免费| 伊人久久久久久久久久久久| 成人免费av片| 我要看一级黄色大片| 国产手机av在线| 午夜探花在线观看| 天天操天天干视频| 久久人人爽人人爽人人片 | 我家有个日本女人| 久久久91视频| 亚洲成人777777| 乱h高h女3p含苞待放| 日韩视频免费观看高清| 黄色免费看视频| 污污的网站18| 婷婷伊人综合中文字幕| 麻豆tv在线播放| 国产91视频在线| 国产爆乳无码一区二区麻豆| 中文字幕在线观看精品| 99热这里只有精品99| a天堂资源在线观看| 97精品人妻一区二区三区| 浴室偷拍美女洗澡456在线| 中文字幕一区二区三区四区欧美| 欧美色图亚洲激情| 久久久久久久久久久久国产| 亚洲v国产v欧美v久久久久久| 国产免费嫩草影院| 少妇高潮av久久久久久| 可以直接看的黄色网址| 国产精品51麻豆cm传媒 | 伊人国产在线观看| 五月天婷婷丁香网| 久久国产精品免费看| 日韩在线视频网址| 中文字幕久久熟女蜜桃| 国产精品第157页| 国产成人毛毛毛片| 狠狠操精品视频| 中文字幕免费高清视频| 久久高清无码视频| www.av免费| 中文字幕欧美人妻精品| 日韩极品视频在线观看 | 亚洲精品久久久久久无码色欲四季| 国产精品后入内射日本在线观看| 久草福利在线观看| 欧美成人精品欧美一级私黄| 91精品少妇一区二区三区蜜桃臀| 久久精品国产亚洲av麻豆蜜芽| 久久手机在线视频| 波多野结衣办公室双飞 | 亚洲图片欧美在线| 国产午夜福利视频在线观看| 国产不卡一二三| 国产suv精品一区二区33| 成年人午夜视频在线观看| 香蕉视频免费在线看| 香蕉视频一区二区| 色一情一乱一乱一区91| 亚洲自拍偷拍精品| 精品一区二区无码| 成人精品小视频| www成人啪啪18软件| 亚洲奶汁xxxx哺乳期| youjizz.com国产| 国产成人精品片| 久艹视频在线免费观看| 精品影片一区二区入口| 性无码专区无码| 亚洲av鲁丝一区二区三区| 精品国产无码AV| 999在线免费视频| 中日韩一级黄色片| 性欧美18一19性猛交| 精品黑人一区二区三区| 六月婷婷激情综合| 精品一区二区三孕妇视频| 亚洲色图欧美视频| 国产情侣呻吟对白高潮| 在线视频观看91| 国产中文字幕免费观看| 午夜免费激情视频| 三级黄色免费观看| 精品少妇一区二区三区免费观| 日本免费一区视频| 午夜老司机福利| 亚洲另类在线观看| 一区二区在线免费看| 一个色综合久久| 六月丁香在线视频| 亚洲国产精品午夜在线观看| 久久机热这里只有精品| 在线视频观看一区二区| 五月激情五月婷婷| 天天插天天操天天射| 久久久精品麻豆| 8x8x最新地址| 樱花草www在线| 日本在线视频免费观看| 97超碰人人干| 国产成人一区二区三区影院在线| 国产精品久久久久久久99| 日韩欧美中文视频| 日本中文字幕免费| 久久久久女人精品毛片九一| 日韩精品在线免费视频| 欧美性猛交bbbbb精品| 特级西西444www高清大视频| 一级黄色短视频| 亚洲精品字幕在线| 天天操天天射天天| 真人bbbbbbbbb毛片| gv天堂gv无码男同在线观看| 香蕉视频在线网址| www.日日操| 国产精品久久久免费视频| 99热在线只有精品| 黄色性生活一级片| 久久国产柳州莫菁门| 丰满女人性猛交| 久久免费视频3| 国产成人在线综合| 69视频免费看| 超级砰砰砰97免费观看最新一期 | 亚洲自偷自拍熟女另类| 欧美xxxxxbbbbb| 中文字幕一区二区三区人妻四季| 人妻丰满熟妇av无码区hd| 中文字幕丰满孑伦无码专区| 国产日韩欧美在线观看视频| 欧美日韩中文在线视频| 国产在线视频第一页| 69视频免费看| 丰满肥臀噗嗤啊x99av| 国产成人一区二区在线观看| 丰满的少妇愉情hd高清果冻传媒| 久久黄色片网站| 免费一级a毛片| 日批在线观看视频| 喜爱夜蒲2在线| 亚洲高清在线不卡| 国产女人18毛片水18精| 黄色在线观看av| 奇米精品一区二区三区| 久久久久亚洲av成人毛片韩| 熟妇人妻系列aⅴ无码专区友真希| 日本免费网站视频| 天天色综合社区| 国产国语亲子伦亲子| 五月天综合视频| 杨幂毛片午夜性生毛片| 国产理论片在线观看| 色www亚洲国产阿娇yao| 色婷婷一区二区三区av免费看| 91影院在线播放| 国产wwwwxxxx| 一级 黄 色 片一| 午夜激情小视频| 久操手机在线视频| 日韩精品一区二区亚洲av观看| 亚洲少妇一区二区| www.com毛片| 国产模特av私拍大尺度| 日韩一级片av| www.久久视频| 欧美色图17p| 久久亚洲天堂网| 69视频在线观看免费| 992tv人人草| 国产精品第七页| 久久国产这里只有精品| 天天综合永久入口| 99精品免费在线观看| 好吊色视频一区二区| 久久这里只有精品18| 中文文字幕一区二区三三| 99自拍视频在线| 中文字幕手机在线视频| 中文字幕人妻一区二| 日本免费精品视频| 日本成人性视频| 国产又粗又猛又爽又黄视频| 日本人妻伦在线中文字幕| 成人av手机在线| 亚洲成熟丰满熟妇高潮xxxxx| 无码国产色欲xxxx视频| av污在线观看| 大地资源二中文在线影视观看 | 欧美精品黑人猛交高潮| 国产极品在线播放| 少妇高潮在线观看| 国产尤物在线观看| 天天摸天天碰天天添| 五月天婷婷在线观看| 一级黄色特级片| 免费看黄色三级| 国产精品高潮呻吟AV无码| 成年人网站免费视频| 日本精品一二三| 日本网站在线免费观看| 一区中文字幕在线观看| 黄色成人一级片| 中文 日韩 欧美| 一区二区视频免费看| 懂色av蜜臀av粉嫩av分享吧| 国产美女18xxxx免费视频| 国产又粗又长免费视频| 国产精品久久久久久久久久久久久久久久久久 | 丁香婷婷综合激情| 无码人妻一区二区三区精品视频| 久久久久久久久艹| 毛片在线视频观看| 国产麻豆剧传媒精品国产| 97超碰人人干| 日韩中文字幕三区| 精品人伦一区二区三电影| 一级黄色片网站| 日本一二三区在线| 国产精品一色哟哟| 亚洲av无码一区二区三区观看 | 午夜爽爽爽男女免费观看| 神马午夜精品95| 精品久久久久久久久久久国产字幕 | 国产1区2区在线| 精品国产精品国产精品| 亚洲视频天天射| 国产麻豆免费视频| 国产一级二级三级视频| 精品久久久久久久免费人妻| 91麻豆免费视频网站| 男女性杂交内射妇女bbwxz| 亚洲影视一区二区| 亚欧洲精品在线视频| 熟女少妇精品一区二区| 欧美美女黄色网| 调教驯服丰满美艳麻麻在线视频| 污视频在线免费观看| 在线免费观看视频网站| 日韩免费一级片| 亚洲综合激情视频| 精品中文字幕av| 免费的一级黄色片| 蜜臀av午夜精品久久| 无码一区二区三区在线| 韩国三级在线播放| av中文字幕免费| 中文字幕乱码一区二区| 成人免费区一区二区三区| 免费在线观看国产精品| 黄色片视频在线| 蜜臀久久99精品久久久酒店新书 | 国产三区在线播放| 一区二区 亚洲| 中文字幕欧美人妻精品| 欧美激情亚洲综合| 99视频在线看| 国产黄色片免费看| 中文在线观看免费网站| 久久露脸国语精品国产91| 久久久91视频| 日韩精品一区二区三| 日本网站在线免费观看|