小编Joh*_*ren的帖子

JavaScript .prototype如何工作?

我不是那种动态编程语言,但是我写了很多JavaScript代码.我从来没有真正了解这个基于原型的编程,有没有人知道这是如何工作的?

var obj = new Object();
obj.prototype.test = function() { alert('Hello?'); };
var obj2 = new obj();
obj2.test();
Run Code Online (Sandbox Code Playgroud)

我记得很久以前我和人们进行了很多讨论(我不确定我在做什么)但是据我所知,没有一个类的概念.它只是一个对象,这些对象的实例是原始的克隆,对吧?

但是JavaScript中这个".prototype"属性的确切目的是什么?它与实例化对象有什么关系?

更新:正确的方式

var obj = new Object(); // not a functional object
obj.prototype.test = function() { alert('Hello?'); }; // this is wrong!

function MyObject() {} // a first class functional object
MyObject.prototype.test = function() { alert('OK'); } // OK
Run Code Online (Sandbox Code Playgroud)

这些幻灯片也非常有帮助.

javascript dynamic-languages prototype-oriented

1988
推荐指数
21
解决办法
49万
查看次数

保持简单以及如何在查询中执行多个CTE

我有这个简单的T-SQL查询,它从表中发出一堆列,并且还连接来自其他相关表的信息.

我的数据模型很简单.我有一个预定的活动,与参与者.我需要知道有多少参与者参加每个活动.

我的解决方案是添加一个CTE,它对预定的事件进行分组并计算参与者的数量.

这将允许我按预定活动加入该信息.保持查询简单.

我喜欢让我的查询简单,但是,如果我将来需要在简单查询期间访问其他临时结果,我该怎么办?

我真的很喜欢它,如果我可以拥有多个CTE,但我不能,对吧?我有什么选择?

我已经在应用程序数据层排除了视图和操作.我更喜欢孤立我的SQL查询.

t-sql sql-server common-table-expression

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

你会如何解析Markdown?

编辑:我最近了解了一个名为CommonMark的项目,该项目可以正确识别并处理原始Markdown规范中的含糊之处.http://commonmark.org/它有很棒的C#库支持.

你可以在这里找到语法.

下载的源代码是用Perl编写的,我无意表达.它充满了正则表达式,它依赖于MD5哈希来逃避某些字符.对此有些不对劲!

我即将为Markdown编写解析器代码.这有什么经验?

如果你对Markdown的实际解析没有任何意义,请给我时间.(这可能听起来很苛刻,但是,我正在寻找洞察力,而不是解决方案,即第三方库).

为了帮助解决问题,正则表达式旨在识别模式!不要解析整个语法.人们认为这样做是foobar.

  • 如果你考虑Markdown,它基本上是基于段落的概念.
  • 因此,合理的方法可能是将输入分成段落.
  • 段落有很多种,例如标题,文本,列表,块引用和代码.
  • 因此,挑战是确定这些段落及其发生的背景.

一旦我发现它值得分享,我会回来找一个解决方案.

markdown parsing

123
推荐指数
3
解决办法
4万
查看次数

什么是有效的,什么不在URI查询中?

背景(问题进一步向下)

我一直在谷歌搜索来回阅读RFC和SO试图解决这个问题,但我仍然没有得到杰克.

所以我想我们只是投票给"最好的"答案就是这样,或者?

基本上它归结为这个.

3.4.查询组件

查询组件是要由资源解释的信息字符串.

query = *uric

在查询组件中,保留字符";","/","?",":","@","&","=","+",","和"$".

让我感到困惑的第一件事就是*uric就是这样定义的

uric = reserved | unreserved | escaped

reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","

然而,有些段落澄清了这一点

上面的"保留"语法类指的是URI中允许的那些字符,但在通用URI语法的特定组件中可能不允许这些字符; 它们用作第3节中描述的组件的分隔符.

"保留"集中的字符不会在所有上下文中保留.实际上在任何给定URI组件中保留的字符集由该组件定义.通常,如果URI的语义在其转义为US-ASCII编码时被替换,则保留字符.

最后一段摘录感觉有些倒退,但它清楚地说明保留的字符集取决于上下文.然而,3.4声明所有保留字符都在查询组件中保留,但是,这里唯一会改变语义的是逃避问号(?),因为URI没有定义查询字符串的概念.

在这一点上,我完全放弃了RFC,但发现RFC 1738特别有趣.

HTTP URL采用以下形式:

http://<host>:<port>/<path>?<searchpart>

在<path>和<searchpart>组件中,"/",";","?" 保留.可以在HTTP内使用"/"字符来指定分层结构.

我至少对RFC 1738取代RFC 2396的HTTP URL进行了解释.因为URI查询没有查询字符串的概念,所以对reserved的解释实际上并不允许我定义查询字符串,因为我习惯了现在做.

当我想将一个数字列表与另一个资源的请求一起传递时,这一切都开始了.我没有想太多,只是将它作为逗号分隔值传递给它.令我惊讶的是,逗号被逃脱了.page.html?q=1,2,3编码的查询变成了page.html?q=1%2C2%2C3它可以工作,但它很难看,并没有想到它.那是我开始浏览RFC的时候.

我的第一个问题很简单,编码逗号是否真的有必要?

根据RFC 2396,我的答案是:是的,根据RFC 1738:没有

后来我找到了有关请求之间传递列表的相关帖子.csv方法被认为是坏的.这显示出来了(之前没见过).

page.html?q=1;q=2;q=3
Run Code Online (Sandbox Code Playgroud)

我的第二个问题,这是一个有效的URL吗?

根据RFC 2396,我的回答是:不,根据RFC 1738:否(;保留)

我没有任何关于传递csv的问题,只要它的数字,但是你确实遇到了如果其他东西突然需要逗号来回来回编码和解码值的风险.无论如何,我尝试使用ASP.NET的分号查询字符串,结果不是我所期望的.

Default.aspx?a=1;a=2&b=1&a=3

Request.QueryString["a"] = "1;a=2,3"
Request.QueryString["b"] = "1"
Run Code Online (Sandbox Code Playgroud)

我没有看到这与csv方法有很大不同,因为当我要求"a"时,我得到一个带逗号的字符串.ASP.NET肯定不是一个参考实现,但它还没有让我失望. …

url uri specifications query-string

91
推荐指数
4
解决办法
8万
查看次数

一种旨在测试的编程语言

是否存在可通过设计测试的编程语言,或者至少在可测试性方面表现出非常好的属性?

例如,设计的编程语言使得单元测试是编码过程的非可选部分,或者更好的是编程语言,其中程序或多或少地从单元测试中推断出来.

或者,如果您更喜欢扭曲问题,那么命令式编程是不好的做法还是不必要的以确保可测试性?

面向对象编程怎么样?像依赖注入和模拟库这样的东西真的有助于TDD,这些实践不会因为成为语言设计的一部分而受益吗?我一直在寻找具有丰富元模型的语言,倾向于允许使用目标语言编写类似DSL的API.这些库是建立在这之上的,为什么不把这些东西放到语言本身?

我发现詹姆斯布莱克引用的博客文章非常好.

不久前,我反思了过去十年的测试习惯,并提出了一些有趣的观察:

  • 我觉得有必要为我经常编写的代码编写测试.
  • 与往常一样,这种需求受到环境限制的阻碍,所以我最终没有编写这些测试.

您是否同意动态编程语言使编写测试更容易的说法?

tdd programming-languages

33
推荐指数
6
解决办法
3467
查看次数

手编码解析器

对于你所有的编译器大师,我想编写一个递归下降解析器,我想用代码来做.没有从其他语法生成词法分析器和解析器并且不告诉我阅读龙书,我最终会到达那里.

我想进入关于为一个合理的简单语言实现词法分析器和解析器的细节,比如说CSS.我想这样做.

这可能最终会成为一系列问题,但现在我开始使用词法分析器了.可以在此处找到CSS的标记规则.

我发现自己编写了这样的代码(希望你可以从这个片段推断出其余部分):

public CssToken ReadNext()
{
    int val;
    while ((val = _reader.Read()) != -1)
    {
        var c = (char)val;
        switch (_stack.Top)
        {
            case ParserState.Init:
                if (c == ' ')
                {
                    continue; // ignore
                }
                else if (c == '.')
                {
                    _stack.Transition(ParserState.SubIdent, ParserState.Init);
                }
                break;

            case ParserState.SubIdent:
                if (c == '-')
                {
                    _token.Append(c);
                }
                _stack.Transition(ParserState.SubNMBegin);
                break;
Run Code Online (Sandbox Code Playgroud)

这个叫什么?我离合理的东西有多远了?我试图在效率和易于使用方面平衡一些公平的东西,使用堆栈来实现某种状态机工作得很好,但我不确定如何继续这样做.

我所拥有的是一个输入流,我可以从中一次读取1个字符.我现在不做任何看法,我只是阅读角色,然后根据当前状态尝试做一些事情.

我真的很想进入编写可重用代码片段的思维模式.此Transition方法目前是这样做的,它将弹出堆栈的当前状态,然后以相反的顺序推送参数.这样,当我写Transition(ParserState.SubIdent, ParserState.Init)它时,它将"调用"一个子程序SubIdent,当完成后,它将返回Init状态.

解析器将以大致相同的方式实现,目前,在这样的单个大方法中,所有内容都允许我在找到令牌时轻松返回令牌,但它也迫使我将所有内容保存在一个单一的大方法中.有没有一种很好的方法将这些标记化规则拆分成单独的方法?

c# compiler-construction parsing lexer

26
推荐指数
3
解决办法
7417
查看次数

控制反转<依赖注入

我感觉不存在控制倒置这样的事情,或者说正确的术语是依赖注入.我错了这个假设吗?

我一直试图为自己定义IoC.在这样做的过程中,我学到了很多关于IoC容器和依赖注入的知识.

刚才,我从Martin Fowler的网站上看到了这个:

结果我认为我们需要一个更具体的名称来模式.控制反转过于笼统,因此人们会发现它令人困惑.结果与各种IoC倡导者进行了大量讨论,我们选择了Dependency Injection这个名称.

在现代IoC世界中,依赖注入只是实现IoC的一种方式吗?

dependency-injection terminology inversion-of-control

20
推荐指数
2
解决办法
7744
查看次数

C#动态类型问题

我刚遇到最奇怪的事情,我有点心思=此刻...

下面的程序编译得很好,但是当你运行它时,你会RuntimeBinderException在尝试阅读时得到一个Value.'object' does not contain a definition for 'Value'

class Program
{
    interface IContainer
    {
        int Value { get; }
    }

    class Factory
    {
        class Empty : IContainer
        {
            public int Value
            {
                get { return 0; }
            }
        }

        static IContainer nullObj = new Empty();

        public IContainer GetContainer()
        {
            return nullObj;
        }
    }

    static void Main(string[] args)
    {
        dynamic factory = new Factory();
        dynamic container = factory.GetContainer();
        var num0 = container.Value; // …
Run Code Online (Sandbox Code Playgroud)

c# types dynamic

19
推荐指数
1
解决办法
1850
查看次数

C#中的只读列表

我有一些带List-property的类:

class Foo {
  private List<int> myList;
}
Run Code Online (Sandbox Code Playgroud)

我想提供对此字段的访问权限仅供读取.

即我希望属性可以访问Enumerable,Count等,并且无法访问Clear,Add,Remove等.我怎么能这样做?

.net c# list

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

OpenID太复杂了吗?

尽管它有效,但我开始严重怀疑OpenID社区.

我正在将OpenID评估为"这个"网站的身份验证服务,虽然承诺很好,但我无法让它工作.我真的迷路了.

我要求SO社区帮助我.给我答案并向我展示示例,以便我可以按照预期的方式利用它.

我的场景非常典型.我想通过特定的Google Apps域对用户进行身份验证.如果您有权访问此Google Apps域,则可以访问我的Web应用程序.

在我迷路的地方,涉及所有先决条件和依赖关系.

  1. 什么是XRD?
  2. 亚迪斯是什么?
  3. 为什么我需要XRD和Yadis?
  4. 在我的网站上部署OpenID身份验证需要做什么?

而且,这对我来说非常重要.

当我登录SO时,我使用我的Google帐户.当我点击登录按钮时,我会看到此确认页面.我授予SO使用我的Google帐户凭据的权利.

不知何故,Google知道它是"Stackoverflow.com",它问我是否可以登录.我想知道我对这个小文本有什么样的控制方式.我打算在几个不同的域上部署OpenID,但我更愿意,如果它们都可以工作,而不必单独配置特殊参数,例如秘密API密钥,什么不是.但是,我不确定这是否是OpenID的先决条件,即Google提供的联合登录API.

.net openid google-apps

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