1

ここで同様の性質の質問を複数見ましたが、私が持っている特定のものに対しては何も機能しません(node.jsを使用しています)。たとえば、このコードをここで取り上げます。

function command_call(message, socket) {
    if (message.length > 1){
    var func = message[0];
    var string = message.slice(1);
    var string = string.join(' ')}
    else{
    var func = message[0];
    var string = '';};
    if(func[0] == '$') {
    (eval(func.slice(1)))(string, socket);};
};

function say(string, socket){
    socket.write(string)};

command_call に渡されたメッセージが "$say hi" の場合、関数 say が呼び出されて "hi" が返されます。これは問題なく動作しますが、eval に入れられた関数が存在しない場合はクラッシュします。たとえば、command_call に渡されるメッセージが「$example blah」である場合、「example」を評価しようとします。基本的に、関数を評価する前に関数が存在するかどうかを確認する必要があります。はい、ノードで行うより良い方法がない限り、evalを使用したいです。繰り返しますが、これはnode.jsにあります

4

1 に答える 1

3

関数のオブジェクトを作成し、インデクサー表記を使用する必要があります。

var methods = { 
    $say: function() { ... }
};

if (!methods.hasOwnProperty(func))
    // uh oh
else
    methods[func]();
于 2013-09-08T21:01:25.347 に答える