gpt4 book ai didi

coffeescript - 尝试开发一个 CoffeeScript Singleton Fetcher

转载 作者:行者123 更新时间:2023-12-01 12:47:04 25 4
gpt4 key购买 nike

我正在尝试基于 CoffeeScript Cookbook 中表示的想法开发一个 CoffeeScript Singleton Fetcher。 .

该食谱描述了如何在 CoffeeScript 中实现单例类以及如何从全局命名空间中获取该类,如下所示:

root = exports ? this

# The publicly accessible Singleton fetcher
class root.Singleton
_instance = undefined # Must be declared here to force the closure on the class
@get: (args) -> # Must be a static method
_instance ?= new _Singleton args

# The actual Singleton class
class _Singleton
constructor: (@args) ->

echo: ->
@args

a = root.Singleton.get 'Hello A'
a.echo()
# => 'Hello A'

我正在尝试开发的内容

我正在尝试开发一种方法来从 root.Singleton 对象中获取许多单例类。像这样:
root = exports ? this 

# The publicly accessible Singleton fetcher
class root.Singleton
_instance = undefined # Must be declared here to force the closure on the class
@get: (args, name) -> # Must be a static method
switch name
when 'Singleton1' then _instance ?= new Singleton1 args
when 'Singleton2' then _instance ?= new Singleton2 args
else console.log 'ERROR: Singleton does not exist'


# The actual Singleton class
class Singleton1
constructor: (@args) ->

echo: ->
console.log @args

class Singleton2
constructor: (@args) ->

echo: ->
console.log @args

a = root.Singleton.get 'Hello A', 'Singleton1'
a.echo()
# => 'Hello A'

b = root.Singleton.get 'Hello B', 'Singleton2'
b.echo()
# => 'Hello B'

目标是通过声明获得一个单例:
root.Singleton 'Constructor Args' 'Singleton name'

问题

不幸的是,a.echo() 和 b.echo() 都打印 'Hello A',它们都引用了同一个 Singleton。

问题

我哪里错了?我怎样才能像上面描述的那样开发一个简单的 Singleton fetcher?

最佳答案

据我所知,您正在覆盖您的“单个”实例。
所以你至少需要一些容器来容纳你的“许多”单例和
稍后访问它们。

class root.Singleton
@singletons =
Singleton1: Singleton1
Singleton2: Singleton2
@instances = {}
@get: (name, args...) -> # Must be a static method
@instances[name] ||= new @singletons[name] args...

你所说的“fetcher”是一种工厂模式。

关于coffeescript - 尝试开发一个 CoffeeScript Singleton Fetcher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14923021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com