2011-07-05 35 views
0

已存在這樣的Javascript代碼:CoffeeScript的函數調用 - 參數和支架

var re = /some_regex/g; 
return re.exec(link.attr('href'))[0] 

如何的CoffeeScript 稱這種現象的CoffeeScript有括號不需要參數,但是沒有在參數的函數另一個電話。

我已經試過:

re = /some_regex/g 
re.exec link.attr 'href' [0] # compile error: unexpected [ 
re.exec (link.attr 'href')[0] # javascript: re.exec((link.attr('href'))[0]); 
re.exec (link.attr('href'))[0] # javascript: re.exec((link.attr('href'))[0]); 

如何做到這一點?或者我應該做

// adding new variable 
temp = re.exec link.attr 'href' 
temp[0] 

回答

3

空間re.exec後導致問題,因爲它會導致CoffeeScript的編譯器認爲(link.attr('href'))[0]是參數。

正確的方法做,這是做的完全一樣在JavaScript中,沒有空間:

re.exec(link.attr('href'))[0] 

如果你真的非常想用無括號語法上這條線,這也將工作:

re.exec(link.attr 'href')[0] 

(他們蒐集到的結果相同)

+0

我明白了。感謝您的回答 –

+0

爲了進一步闡明:通常,CoffeeScript的隱含parens延伸到表達式的末尾。所以'link.attr'href'[0]'等價於'link.attr('href'([0]))',這是沒有意義的。 –

+0

對我以前的評論的一個小修改:''href'[0]'本身是一個無效的表達式,因爲'x [y]'編譯爲'x([y])'並且編譯器識別出字符串不是函數。 –

1

這是不是可以更清楚,如果你只是括號是絕對需要它的一部分,做最CoffeeScr休息IPT樣的方式?

(re.exec link.attr 'href')[0] 

,或者甚至(如果 'HREF' 只是另一個屬性):

(re.exec link.attr.href)[0] 

,或者更好的,但是,更清晰,沿着您最初提出什麼線:

matches = re.exec link.attr.href 
matches[0] // idiomatic to re.exec: first element is matched RE