0

質問に答えている間、タイトルに関連するものは何もなかったので、これを更新しています:) CoffeeScriptクラスとの依存関係を最適に管理するにはどうすればよいですか?

スーパークラス「utils.coffee」があるとしましょう。

fs = require 'fs'
# another bazillion libs

class Utils

  doThis: () ->
    console.log 'done!'

exports.Utils = Utils

私のサブクラスでは、簡単に呼び出すことができますdoThis。しかしfs、エラーが発生せずに参照することはできませんReferenceError: fs is not definedmyclass.coffee

{Utils} = require './utils.coffee'

class MyClass extends Utils

  doThat: () ->

    fs.readFile 'any_old_file', (error, fd) =>   
      buffer = fd.toString()

      # do stuff

exports.MyClass = MyClass

私たちがそれを実行するよりも:

{MyClass} = require('./myclass.coffee')
myclass = new MyClass()

myclass.doThis() # Cool!
myclass.doThat() # Not good
4

2 に答える 2

0

メソッド@の前に置くべきではありません。traceこれにより、そのクラスの他のすべてのメソッドとともに、インスタンスレベルではなくクラスレベルの関数になります。

trace: (className, method) ->

また、オブジェクトがインスタンス化されるたびにrequireを呼び出す理由がないため、require呼び出しを最上位のスコープに移動することをお勧めします。

これの代わりに:

@restler = require('restler')
@_ = require('underscore')

これを一番上に置いてください:

restler = require 'restler'
_ = require 'underscore'

そしてこれを行うためのより良いCoffeescriptの方法:

Utils = require('./utils.coffee').Utils

これは:

{Utils} = require './utils.coffee'

これの代わりに:

(if (results and results.length > 1) then results[1] else '')

これを行うだけです:

if results?.length > 1 then results[1] else ''

また、私はこれだと思います:

@buildKey: (args)

おそらく感嘆符であるはずであり、次のように書き直すことができます。

buildKey: (args...)
    @debug(@getName(), 'buildKey', "arg: #{arg}") for arg in args
    return args.join ':'

編集

CoffeeScriptのスコープ規則をよく理解しておくことをお勧めします。これが、ほとんどの問題の原因であると思われるためです。

あなたは@fs = fsあなたのUtilsクラスにいます。これはUtils.fs = fs;JavaScriptで書くのと同じです。次に、クラスでこれにアクセスしようとしますfsMyClass、これはUtilsに接続されているため、fsがスコープ内にないため、意味がありません。

以前に保存Utils.fs.readFile 'any_old_file', (error, fd) =>した参照にアクセスする場合は、これを行う必要があります。fs

于 2012-08-14T04:45:19.663 に答える
0

fsファイルの内部のみを参照しutils.coffee、外部ではUtils、別のファイルからアクセスできませんでした。私はそれを次のように設定しなければなりませんでした:

fs = require 'fs'
# another bazillion libs

class Utils

  @fs = fs

  doThis: () ->
    console.log 'done!'

exports.Utils = Utils

それよりも、私は単に次のようにアクセスしました:

{Utils} = require './utils.coffee'

class MyClass extends Utils

  doThat: () ->

    Utils.fs.readFile 'any_old_file', (error, fd) =>   
      buffer = fd.toString()

      # do stuff

exports.MyClass = MyClass
于 2012-08-15T13:01:08.317 に答える