2016-05-06 4 views
-1

だから、私はNode.js learnyounodeチュートリアル(かなり面白い)をやっていますが、私はjavascriptには見知らぬ人ではありません。要求の1つは、ユーザーがディレクトリとファイル拡張子を引数として受け取り、指定された拡張子に一致するファイルに進むプログラムを書き込ませることです。組み込みのNode.js関数で追加の引数を渡すには?

データが関数に渡される場所のさまざまな場所で自分の引数を調べると、Node.jsを取得して、組み込み関数のコールバック関数に追加の引数を渡すことができません。

たとえば、次のスニペットを実行し、エラー、パス、および拡張子を渡して渡されたすべての引数を表示したいが、 "ext"変数は無視されます。

var fs = require("fs"), path = require("path") 
var dir = process.argv[2], ext = process.argv[3]; 

fs.readdir(dir, function (err, data, ext) { 
    console.log(arguments); 
    }); 

この機能を必要とするのは、extの値を取得するために関数スコープを破壊しないようにするためです。

私はこのタイプのものを一日中カスタム機能で行うことができますが、組み込み関数はやや寛大です。最も簡単な方法は、単に各エントリ名に内蔵されたpath.extname()機能を使用することである

おかげで、 ボブ

+0

にC/PHPの背景から来ている人は、それが「希望というあなたに意味を成してい役に立てば幸い"機能/機能はそれを利用可能にするか?あなたはAPIではないことを知っています。どうしてそうしようとしていますか? – Amit

+0

私は何かを望んでいない、ちょうど方法があるかどうか疑問に思う。なぜ私はこの機能を望んでいたのかを明確に述べたので、もう一度言います。 "この機能を必要とするのは、機能スコープを破壊しないようにするためです" –

+0

また、「APIではないことはわかっています」と繰り返します。 – Amit

答えて

0

:IRCでNode.jsの人々に話した

fs.readdir(dir, function(err, entries) { 
    if (err) throw err; 
    for (var i = 0; i < entries.length; ++i) { 
    if (path.extname(entries[i]) === ext) 
     console.log(entries[i]); 
    } 
}); 
+0

解決に感謝しますが、これは私が求めていたものではありません。 –

+0

これは本当にこれを実行する唯一の方法です。あなたの質問へのコメントで述べたように、あなたが示唆していたような余分な関数のパラメータを提供する方法はありません。ノードは、コールバックパラメータ名やコールバックパラメータを解析しません。 – mscdex

+0

ええ、余分なパラメータは問題外です。カスタムクロージャを使用する方法、コードをラップするクラスを作成する方法、またはノードが独自のクロージャ(デフォルトの動作)でモジュールをラップする方法があります。 –

0

は、判明します方法のjavascriptは範囲内のスコープを維持するためのこのようなメソッドは必要ありません。 Node.jsはデフォルトでモジュールを独自のクロージャに置くため、変数は関数の外部でアクセスでき、グローバル名前空間に干渉することはありません。

この回答はnode js and variable scopeで見つかりましたが、これはおそらく自分の状況に最もよく似ていますが、質問を投稿したときに必要なことはわかりませんでした。

また、Mozillaにnice closure examplesが見つかりました。個人的なノートで

私はこれよりも少し良くJavaScriptを知っていたと思った、と私はこの答えはNode.jsの

関連する問題