小编Jor*_*dan的帖子

解决与Node.js的循环依赖关系需要和CoffeeScript中的类

我想知道是否有一种方法可以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之前移动来解决循环依赖关系的一种常见方法 …

javascript circular-dependency require node.js coffeescript

8
推荐指数
1
解决办法
5125
查看次数

为什么带有splat参数的Ruby procs/blocks的行为与方法和lambda不同?

为什么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

ruby lambda block splat proc

7
推荐指数
1
解决办法
2117
查看次数