2014-02-11 62 views
0

我想寫與sweetjs宏去從sweetjs補充說:「」

{a,b,c} 

{a:'',b:'',c:''} 

基本上我想列出一個對象的屬性,並創建一個空的原型具有這些屬性。

我寫規則是

macro basic { 
    rule { { $x (,) ... } } => { 
    {($x = 3)(,) ...} 
    } 
} 

和,如果我有

basic { a, b, c } 

它擴展爲

{A = 3,B = 3,C = 3; }

但是如果我查NGE在: ''= 3

意外標記:...(A:),...]

(另外,我不知道爲什麼它在末尾添加一個;之後的擴展c = 3

任何想法?

+0

如果用「{$ x:3}」替換「($ x = 3)」,會發生什麼情況? –

+0

意外的令牌,[...},{b:...] – user1544128

+0

也許傳遞:作爲字符串? ($ x「:」3) –

回答

1

好,我以不同的方式已經解決了,因爲我不知道如何使用:(因爲它是用於指定標記的類型特殊字符),我使用了一個臨時變量:

macro basic { 
    rule { { $x (,) ... } } => { 
    var tmp = {}; 
    (tmp [toString $x] = undefined)(;) 
    ... 
    } 
} 
1

您需要使用$()而不是裸餘額才能將鍵值對讀取爲單個重複模式。

macro basic { 
    rule { { $x (,) ... } } => { 
    { $($x: 3) (,) ... } 
    } 
} 

但值得注意的是,這不是你需要宏的情況。一個正常的函數可以很容易地做到這一點 - 你只需要使用parens而不是大括號和字符串,而不是裸露的標識符。

+0

還有很多需要了解Javascript的信息,我怎樣才能把{'a','b',' c'}爲{'a':3,'b':3,'c':3}帶一個函數?(我注意到{1,2,3}在chrome控制檯上給出了3,而不是錯誤我想,但{1,2,3}應該在javacript中是什麼?) – user1544128

+1

@ user1544128:那麼,您不會使用括號作爲分隔符;您會使用括號,但否則它會在外部看起來相同。你只需要做一些類似'function basic(){var out = {}; for(var i = 0; i Chuck

+0

感謝您的回答,但是我的問題,爲什麼我使用宏的原因之一是我試圖避免使用字符串。 – user1544128