小编Val*_*nko的帖子

代理和装饰模式之间的差异

你能解释一下ProxyDecorator之间的区别吗?

我看到的主要区别在于,当我们假设Proxy使用合成Decorator使用聚合时,似乎很清楚通过使用多个(一个或多个)装饰器,您可以修改/添加功能到预先存在的实例(装饰),而代理有自己的代理类的内部实例,并委托给它添加一些额外的功能(代理行为).

是个问题-是否代理与聚集创造仍然是代理还是相当装饰?是否允许(通过GoF模式中的定义)创建具有聚合的代理

oop design-patterns decorator proxy-pattern

108
推荐指数
7
解决办法
3万
查看次数

如何为Moq显示内部接口?

我的C#解决方案中有3个项目.

  • 签名
  • 结构
  • 测试

签名具有公共和内部接口.它也有

  [assembly: InternalsVisibleTo("Structures")]
  [assembly: InternalsVisibleTo("Tests")]
Run Code Online (Sandbox Code Playgroud)

在AssemblyInfo.cs中.

结构有公共和内部类和

  [assembly: InternalsVisibleTo("Tests")]
Run Code Online (Sandbox Code Playgroud)

在AssemblyInfo.cs中.

测试有下一个来源:

<packages>
  <package id="Moq" version="4.2.1409.1722" targetFramework="net45" />
  <package id="NUnit" version="2.6.4" targetFramework="net45" />
  <package id="NUnitTestAdapter" version="1.2" targetFramework="net45" />
</packages>
Run Code Online (Sandbox Code Playgroud)

在packages.config中作为NuGet包.

我从Signatures和Structures的内部类中为内部接口编写了一些单元测试.运行,并有下一个结果:异常:

类型Signatures.InterfaceX对DynamicProxy不可见.无法为无法访问的类型创建代理.将类型设置为public或internal,并使用[assembly:InternalsVisibleTo(InternalsVisible.ToDynamicProxyGenAssembly2)]属性标记程序集.

似乎合乎逻辑.我将[assembly:InternalsVisibleTo("InternalsVisible.DynamicProxyGenAssembly2")]添加到了Signatures and Structures项目的装配信息中.运行,并有下一个结果:异常:

从程序集"DynamicProxyGenAssembly2,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null"中键入"Castle.Proxies.IReminiscenceableDataTableProxy"正在尝试实现无法访问的接口.

这是有帮助的,但没有.仅更改异常消息.

如何解决我的问题?

c# nunit unit-testing moq internal

38
推荐指数
4
解决办法
1万
查看次数

为什么“即使有不同的条件界限,也不能有多个一致性”?

我希望 Swift 使我能够在where块中为具有指定条件的类型创建扩展。我想象我可以使用依赖于具体泛型类型值 ( T) 的不同扩展来扩展相同的泛型类型。但不是。以下示例演示了我的问题:

protocol P {    
    associatedtype Prop 
    var property: Prop { get }
}

enum E<T: P> {
   case single(T)
   case double(T)
}

extension E: P where T.Prop == Int {
   var property: Int {
      switch self {
      case .single(let o): return o.property
      case .double(let o): return o.property * 2
      }
   }
}

extension E: P where T.Prop == String {
   var property: String {
      switch self {
      case .single(let o): return o.property …
Run Code Online (Sandbox Code Playgroud)

generics swift swift-extensions swift-protocols

9
推荐指数
2
解决办法
1442
查看次数

“forall”如何影响函数签名?

我使用“forall”量词声明了两个函数。其中第一个在签名之前有一个量词,其中包含所有泛型类型参数。第二个使用量词代替每个泛型类型参数的第一个用法。

\n
f :: forall a b c. a -> b -> c -> b -> a\nf a _ _ _ = a\n\ng :: forall a. a ->\n     forall b. b ->\n     forall c. c -> b -> a\ng a _ _ _ = a\n
Run Code Online (Sandbox Code Playgroud)\n

我期望这两个函数是相同的(区别仅在于描述的风格),但以下两个测试告诉我事实并非如此。

\n
w_f :: (forall a b c. a -> b -> c -> b -> a) -> Bool\nw_f _ = True\n\nw_g :: (forall a. a ->\n        forall b. b ->\n        forall c. c …
Run Code Online (Sandbox Code Playgroud)

haskell function signature parametric-polymorphism

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

如何在VS 2015中降级C#版本?

我有从C#6.0到C#5.0重构的解决方案.我应该在VS 2015中更改哪些设置以检查我的解决方案中是否缺少使用C#6.0语法功能?我可以通过其他方式这样做吗?

c#-5.0 c#-6.0 visual-studio-2015

7
推荐指数
2
解决办法
2214
查看次数

是否可以为string.Trim()添加字符(而不是替换默认值)?

我想修改默认的空格字符和我的附加字符.我按照以下方式做到了这一点:

string MyTrim(string source)
{
    char[] badChars = { '!', '?', '#' };
    var result = source.Trim().Trim(badChars);
    return result == source
         ? result
         : MyTrim(result);
}
Run Code Online (Sandbox Code Playgroud)

至于我,它看起来很愚蠢,因为它有比你需要的迭代更多的迭代.是否可以为string.Trim()添加字符(而不是替换默认值)?或者我在哪里可以找到默认情况下在string.Trim()中使用的'默认空白字符'数组?这听起来很容易,但我找不到.

.net c# trim

6
推荐指数
1
解决办法
128
查看次数

如何创建具有不同“产品模块名称”和“产品名称”的项目并将其模块导入另一个项目?

我试图实现问题中描述的任务,但失败了。重现步骤:

  1. 创建新的工作区“ WS”
    在此处输入图片说明 在此处输入图片说明
  2. 创建新的Cocoa Touch框架 在此处输入图片说明 在此处输入图片说明
    • 在“为新项目选择选项:”窗口中设置“产品名称:” =“产品”。保持其他输入自动生成。 在此处输入图片说明
    • 在下一个向导窗口中,设置“添加到:” = WS。
      在此处输入图片说明
  3. 转到:“产品(刚刚创建)->构建设置(所有选项卡)->包装”,然后设置“产品名称” =“产品”和“产品模块名称” =“模块” 在此处输入图片说明 在此处输入图片说明
  4. 建立
  5. 创建客户端项目:执行步骤2,但不要使用产品,而是使用客户端
  6. 将“ Product.framework”添加到客户端的“链接框架和库”中 在此处输入图片说明
  7. 在客户端项目中创建“ TryToImport.swift”文件,并在自动生成的“导入基础”行之后添加“导入模块”代码行。 在此处输入图片说明
  8. “清理生成文件夹”和生成客户端

结果是错误:没有这样的模块'Module'。

我尝试了很多事情来做,但是没有任何帮助。对于我来说,所描述的情况是正确的。
怎么了?
我该怎么办?

我的Xcode版本= 10.3(10G8)

xcode module build swift

6
推荐指数
1
解决办法
131
查看次数

为什么functor结果绑定到新模块名称对于调用嵌套函数是必要的?

我有:

module Functor(M : sig end) = struct
  module NestedFunctor(M : sig end) = struct
  end 
end
Run Code Online (Sandbox Code Playgroud)

此代码有效:

module V = Functor(struct end)
module W = V.NestedFunctor(struct end)
Run Code Online (Sandbox Code Playgroud)

但这是无效的:

module M = Functor(struct end).NestedFunctor(struct end)
                          (*  ^ Error: Syntax error *)
Run Code Online (Sandbox Code Playgroud)

据我所知,仿函数是一组输入模块和一组允许的输出模块之间的关系.但是这个例子让我理解困惑.为什么functor结果绑定到新模块名称对于调用嵌套函数是必要的?

我的编译器版本= 4.01.0


我是OCaml的新手.当我找到仿函数时,我想象一下

Engine.MakeRunnerFor(ObservationStation
                       .Observe(Matrix)
                       .With(Printer))
Run Code Online (Sandbox Code Playgroud)

我认为它是人类友好的架构符号的好工具.然后我很失望.我明白了:这是语法错误.我认为这种限制会扩大语法,并使其不那么直观.

而我的"为什么?" 主要问题是在语言概念的背景下.

ocaml functor

5
推荐指数
1
解决办法
585
查看次数

gulp.js 中的错误

我试图gulp serve在我的源目录中运行。这个命令加载了所有文件并开始使用我的gulpfile.js

结果我有以下错误:

gulpInst.start.apply(gulpInst, toRun);
              ^
Run Code Online (Sandbox Code Playgroud)

类型错误:无法在 C:\Users...\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:129:19 at nextTickCallbackWith0Args (node.js:420:9) 处读取未定义的属性“应用” process._tickCallback (node.js:349:13) at Function.Module.runMain (module.js:443:11) at start (node.js:139:18) at node.js:974:3

gulpfile.js 的第一行是:

const gulp = require('gulp');
Run Code Online (Sandbox Code Playgroud)

这也是我第一次使用 node.js 和 gulp。我需要从源代码启动现有的应用程序,对我来说,这个错误消息看起来像是框架发现的框架中的错误。我觉得我做错了什么,但不知道是什么?我该如何解决这个问题?

javascript node.js gulp

5
推荐指数
1
解决办法
2702
查看次数

如何包括工作?

我有

module type T = sig
    type t
end
Run Code Online (Sandbox Code Playgroud)

module Make (TypeProvider : T) = struct
    include TypeProvider
    type d = Wrapped of t
end
Run Code Online (Sandbox Code Playgroud)

module Test = struct
    include Make (struct type t = ForWrap end)
    let f = function | Wrapped ForWrap -> ()
end
Run Code Online (Sandbox Code Playgroud)

我想象编译后的测试就像

module Test = struct
    type t = ForWrap
    type d = Wrapped of t
    let f = function | Wrapped ForWrap -> ()
end
Run Code Online (Sandbox Code Playgroud)

但实际上,它不是可编译的代码.OCaml说我:

module Test = struct
    include …
Run Code Online (Sandbox Code Playgroud)

ocaml module compiler-errors include functor

4
推荐指数
1
解决办法
89
查看次数