2012-02-03 42 views
2

與朋友一起,我們正在製作一種名爲Simp的新語言。它應該是一個簡單但現代的腳本語言,它具有良好和直觀的語法。下面是一個簡單的例子:語言設計:比較兩個值時的隱式轉換

var sum = 0 
for i in 3..999 { 
    if (i % 3 == 0) or (i % 5 == 0) { 
     sum += i 
    } 
} 
say sum 

現在,我們正站在一個問題,如果我們比較兩個值時,應使用隱式轉換。具體來說,下面的程序應該輸出什麼?

# 1. 
say (1 == '1') 

# 2. 
var x = 1 
switch (x) { 
    case '1': say true; break; 
    case 1: say false; break; 
} 

# 3. 
if ('1') say true; 
else say false; 

如果1.輸出的話,我們也許應該還包括===運營商太檢查類型。但我不是那個運營商的忠實粉絲。

如果由於比較了兩種不同類型而引發錯誤,那很好。多一點打字(1 == int('1'))解決了這個問題,使代碼更清晰。但在這種情況下,如何爲2.3.表現?

你推薦什麼解決方案?

回答

2

非常主觀。如果本網站的每個人都回答了這個問題,那麼每個答案都會有所不同取決於你想要的。看起來你正在把一門新的語言作爲一種學習體驗,而不是用現有的語言來解決一些隱藏的問題。沒有什麼不對,但你會遇到這個「你認爲這應該是什麼意思?」如果你沒有設定某種目標,問題會很多。

Paul Graham主張最好的設計來自於自己設計的理念。 C編程語言很受歡迎,因爲發明者首先爲自己設計了它,而不是其他的。順便說一下,這使得它受到其他人的歡迎。另一方面,COBOL是由委託人設計的,所以非程序員可以理解它,程序員可以使用它。最終,非程序員仍然無法閱讀,程序員討厭使用它。

考慮到這一點,制定一個適合自己的語言的目標,並且不要過分重視別人的意見。如果在做出某些設計決定之後,你有一種你不喜歡使用的語言,問自己爲什麼,並做出必要的改變,直到你喜歡使用它爲止。

在這個特殊的例子中,你說你不喜歡===運算符。那麼不要包含它。

如果你還沒有研究其他範例,那麼你可能會有所幫助。流行的命令式/面嚮對象語言中存在的深度和概念性質量可能相當有限。並不是說沒有太多深度,只是通過將所有內容都基於這些範例中的知識,就可以將自己限制在一小部分可以包含在這種新語言中的概念中。

+0

謝謝,它幫助。我們可能會用'=='來檢查類型。但是簡單地說'if(x){}'將對'x'執行隱式轉換(對bool),並且像''「,[],0'這樣的東西評估爲false。因此,'if(x){}'將不如'if(x == true){}'嚴格,這通常意味着不那麼嚴格。也許,我們也會擺脫括號{},但這是另一回事:-)。 – clime 2012-02-10 21:44:45

+0

順便說一句。我和我的朋友,我們都愛哈斯克爾!這將是顯而易見的:-)。我認爲我們接近真的很酷。請保持你的指尖爲我們:-)。 – clime 2012-02-10 21:52:56

+0

哈哈,當然!很高興知道你還在爲此工作。期待看到它的結果 – TheIronKnuckle 2012-02-11 04:43:12