2011-07-05 13 views
0

は、このようなJavascriptのコードが存在します。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]); 

これを行うにはどのように?それは(link.attr('href'))[0]が引数であることを考えるのはCoffeeScriptのコンパイラが発生するためか、私はre.exec

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

答えて

3

スペースを作る必要があり、問題を引き起こしています。

これを行うための正しい方法は、スペースなしで、正確にはJavaScriptのようにそれを行うことです。

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

あなたが本当にひどく、このライン上の無括弧構文を使用したい場合は、これもうまくいきます:

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

あなたは、単に絶対にそれを必要とする部分を括弧場合

+0

私は理解しました。お返事ありがとうございます –

+0

さらに明確にするために:原則として、CoffeeScriptの暗黙的な括弧は式の最後まで広がります。したがって、 'link.attr 'href' [0]'は 'link.attr( 'href'([0]))'と同等です。 –

+0

私の前のコメントに対する小さな修正: '' href '[0] '自体は' x [y] 'にコンパイルされ、文字列が関数ではないことをコンパイラが認識するので、 。 –

1

が、これは明確ではないでしょう(彼らは同じ結果にコンパイル)、および最もCoffeeScrで残りを行いipt-like-way?

(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 
関連する問題