2014-10-29 52 views
4

有人能告訴我我在做什麼錯嗎?測試將'計算'功能視爲未定義,我完全不知道爲什麼。Exerciseism> Javascript>海明鍛鍊:獲取'未定義不是函數'錯誤

這是我得到的錯誤:

Failures: 

1) Hamming no difference between identical strands 
    Message: 
    TypeError: undefined is not a function 
    Stacktrace: 
    TypeError: undefined is not a function 
    at null.<anonymous> (C:\Users\Schann\exercism\javascript\hamming\hamming_test.spec.js:6:12) 

2) Hamming complete hamming distance for single nucleotide strand 
    Message: 
    TypeError: undefined is not a function 
    Stacktrace: 
    TypeError: undefined is not a function 
    at null.<anonymous> (C:\Users\Schann\exercism\javascript\hamming\hamming_test.spec.js:10:12) 

Finished in 0.041 seconds 
2 tests, 2 assertions, 2 failures, 0 skipped 

//------------------- 
// Hamming.js 
//------------------- 
var Hamming = function() { 
    var compute = function(input1, input2) { 
     var diff = 0; 
     for (i = 0; i < input1.length; i++) { 
      if (input1[i] != input2[i]) { 
       diff = diff + 1;    
      }; 
     }; 
     return diff; 
    }; 
}; 

module.exports = Hamming; 

//------------------- 
// hamming_test.spec.js 
//------------------- 

var compute = require('./hamming').compute; 

describe('Hamming', function() { 

    it('no difference between identical strands', function() { 
    expect(compute('A', 'A')).toEqual(0); 
    }); 

    it('complete hamming distance for single nucleotide strand', function() { 
    expect(compute('A','G')).toEqual(1); 
    }); 

[rest truncated] 

}); 

回答

6

compute功能永遠不會被導出,這只是Hamming函數的局部變量。

你想要做更重要的是這樣的:

var Hamming = { 
    compute: function(input1, input2) { 
    var diff = 0; 
    for (i = 0; i < input1.length; i++) { 
     if (input1[i] != input2[i]) { 
     diff = diff + 1; 
     } 
    } 
    return diff; 
    } 
}; 

module.exports = Hamming; 

我的猜測是,你必須從傳統的編程語言如Java和C++的背景下,發現自己的Hamming功能類的聲明用compute的成員。

+0

你的猜測是現貨。我還沒有完全習慣JavaScript編碼風格。謝謝! – 2014-10-30 14:19:05

+2

這條線會發生什麼? var compute = require('./ hamming')。compute; – Jwan622 2015-04-15 05:03:10

+1

@ Jwan622:'require('./ hamming')'評估爲我們上面導出的Hamming對象; '.compute'訪問它的'compute'成員。 – 2015-08-28 15:24:34