小编Mic*_*son的帖子

在C#中实现模式匹配

在Scala中,您可以使用模式匹配来生成结果,具体取决于输入的类型.例如:

val title = content match {
    case blogPost: BlogPost => blogPost.blog.title + ": " + blogPost.title
    case blog: Blog => blog.title
}
Run Code Online (Sandbox Code Playgroud)

在C#中,我最好能够写:

var title = Visit(content,
    (BlogPost blogPost) => blogPost.Blog.Title + ": " + blogPost.Title,
    (Blog blog) => blog.Title
);
Run Code Online (Sandbox Code Playgroud)

这可能吗?当我尝试将其作为单一方法编写时,我不知道如何指定泛型.以下实现似乎是正确的,除了让类型检查器允许接受T的子类型的函数:

    public TResult Visit<T, TResult>(T value, params Func<T, TResult>[] visitors)
    {
        foreach (var visitor in visitors)
        {
            if (visitor.Method.GetGenericArguments()[0].IsAssignableFrom(value.GetType()))
            {
                return visitor(value);
            }
        }
        throw new ApplicationException("No match");
    }
Run Code Online (Sandbox Code Playgroud)

我最接近的是将函数单独添加到对象,然后调用访问值:

    public class Visitor<T, TResult>
    {
        private class Result …
Run Code Online (Sandbox Code Playgroud)

c# pattern-matching

18
推荐指数
3
解决办法
9598
查看次数

AngularJS:如何将常量对象绑定到指令

我使用"scope"创建了一个带有绑定的指令.在某些情况下,我想绑定一个常量对象.例如,使用HTML:

<div ng-controller="Ctrl">
    <greeting person="{firstName: 'Bob', lastName: 'Jones'}"></greeting>
</div>
Run Code Online (Sandbox Code Playgroud)

和JavaScript:

var app = angular.module('myApp', []);

app.controller("Ctrl", function($scope) {

});

app.directive("greeting", function () {
    return {
        restrict: "E",
        replace: true,
        scope: {
            person: "="
        },
        template:
        '<p>Hello {{person.firstName}} {{person.lastName}}</p>'
    };
});
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但它也会导致JavaScript错误:

Error: 10 $digest() iterations reached. Aborting!
Run Code Online (Sandbox Code Playgroud)

(小提琴演示问题)

绑定常量对象而不导致错误的正确方法是什么?

angularjs angularjs-directive angularjs-scope

14
推荐指数
2
解决办法
2万
查看次数

Ruby中的循环依赖关系

假设我们有两个类,Foo和Foo Sub,每个类分别位于不同的文件foo.rb和foo_sub.rb中.

foo.rb:

require "foo_sub"
class Foo
    def foo
        FooSub.SOME_CONSTANT
    end
end
Run Code Online (Sandbox Code Playgroud)

foo_sub.rb:

require "foo"
class FooSub < Foo
    SOME_CONSTANT = 1
end
Run Code Online (Sandbox Code Playgroud)

由于循环依赖,这不起作用 - 我们无法定义任何一个没有另一个的类.我见过各种各样的解决方案.其中两个我想避免 - 即将它们放在同一个文件中并删除循环依赖.所以,我发现的唯一其他解决方案是前向声明:

foo.rb:

class Foo
end
require "foo_sub"
class Foo
    def foo
        FooSub.SOME_CONSTANT
    end
end
Run Code Online (Sandbox Code Playgroud)

foo_sub.rb

require "foo"
class FooSub < Foo
    SOME_CONSTANT = 1
end
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果我有三个文件,我就无法做同样的事情:

foo.rb:

class Foo
end
require "foo_sub_sub"
class Foo
    def foo
        FooSubSub.SOME_CONSTANT
    end
end
Run Code Online (Sandbox Code Playgroud)

foo_sub.rb:

require "foo"
class FooSub < Foo
end
Run Code Online (Sandbox Code Playgroud)

foo_sub_sub.rb:

require "foo_sub"
class FooSubSub < …
Run Code Online (Sandbox Code Playgroud)

ruby circular-dependency require

11
推荐指数
1
解决办法
6911
查看次数

使用静态类/方法依赖项测试类

所以我有一个看起来像这样的课程:

public class MyClassToTest()
{
    MyStaticClass.DoSomethingThatIsBadForUnitTesting();
}
Run Code Online (Sandbox Code Playgroud)

和一个看起来像这样的静态类:

public static class MyStaticClass()
{
    public static void DoSomethingThatIsBadForUnitTesting()
    {
        // Hit a database
        // call services
        // write to a file
        // Other things bad for unit testing
    }
}
Run Code Online (Sandbox Code Playgroud)

(显然这是一个愚蠢的例子)

所以,我知道第二类在单元测试方面注定要失败,但有没有办法解开MyClassToTest类,以便我可以测试它(没有实例化MyStaticClass).基本上,我希望它忽略这个电话.

注意:遗憾的是这是一个Compact Framework项目,因此不能使用Moles和Typemock Isolator等工具:(.

c# static unit-testing mocking

9
推荐指数
1
解决办法
2694
查看次数

JavaScript:高效的整数运算

我目前正在为编译为JavaScript的小语言编写编译器.在这种语言中,我非常喜欢使用整数,但JavaScript只支持Number,这是一个双精度浮点值.那么,在JavaScript中实现整数的最有效方法是什么?与使用Number相比,这有多高效?

特别是,溢出行为应该与其他语言一致:例如,向INT_MAX添加一个应该给出INT_MIN.整数应该是32位或64位.

javascript math integer

6
推荐指数
2
解决办法
3736
查看次数