我想知道是否有一种方法可以require在使用CoffeeScript类时,习惯性地避免与Node.js的循环依赖性问题super.鉴于以下简化的CoffeeScript文件:
一杯咖啡:
C = require './c'
B = require './b'
class A extends C
    b: B
    someMethod: ->
        super
module.exports = A
Run Code Online (Sandbox Code Playgroud)
b.coffee:
C = require './c'
A = require './a'
class B extends C
    a: A
    someMethod: ->
        super
module.exports = B
Run Code Online (Sandbox Code Playgroud)
这里的第一个显而易见的问题是A和B之间存在循环依赖关系.无论哪个首先评估,都将{}作为对另一个的参考.要在一般情况下解决这个问题,我可能会尝试在每个上执行以下操作:
一杯咖啡:
C = require './c'
class A extends C
module.exports = A
B = require './b'
_ = require 'underscore'
_.extend A::,
    b: B
    someMethod: ->
        super
Run Code Online (Sandbox Code Playgroud)
这有点像黑客攻击,但似乎是通过在依赖关系B module.exports之前移动来解决循环依赖关系的一种常见方法 …
为什么Ruby(2.0)使用splat参数处理/块的行为与方法和lambda不同?
def foo (ids, *args)
  p ids
end
foo([1,2,3]) # => [1, 2, 3]
bar = lambda do |ids, *args|
  p ids
end
bar.call([1,2,3]) # => [1, 2, 3]
baz = proc do |ids, *args|
  p ids
end
baz.call([1,2,3]) # => 1
def qux (ids, *args)
  yield ids, *args
end
qux([1,2,3]) { |ids, *args| p ids } # => 1
Run Code Online (Sandbox Code Playgroud)
以下是对此行为的确认,但没有解释:http: //makandracards.com/makandra/20641-careful-when-calling-a-ruby-block-with-an-array
block ×1
coffeescript ×1
javascript ×1
lambda ×1
node.js ×1
proc ×1
require ×1
ruby ×1
splat ×1