问题列表 - 第16032页

Scala正则表达式多块捕获

我正在尝试使用Scala中的正则表达式捕获多行字符串的部分内容.输入格式如下:

val input = """some text
              |begin {
              |  content to extract
              |  content to extract
              |}
              |some text
              |begin {
              |  other content to extract
              |}
              |some text""".stripMargin
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几种可能性,可以让我从begin { }块中获取文本.其中之一:

val Block = """(?s).*begin \{(.*)\}""".r

input match {
  case Block(content) => println(content)
  case _ => println("NO MATCH")
}
Run Code Online (Sandbox Code Playgroud)

我得到了NO MATCH.如果我删除\}正则表达式看起来像(?s).*begin \{(.*)它与最后一个块匹配,包括不需要的}和"一些文本".我在rubular.com检查了我的正则表达式,/.*begin \{(.*)\}/m并且至少匹配了一个块.我想当我的Scala正则表达式匹配时,我可以开始使用findAllIn匹配所有块.我究竟做错了什么?

我看一下Scala Regex启用Multiline选项,但我无法捕获所有出现的文本块,例如a Seq[String].任何帮助表示赞赏.

regex scala

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

为类层次结构重载operator ==的正确方法是什么?

假设我有以下类层次结构:

class A
{
    int foo;
    virtual ~A() = 0;
};

A::~A() {}

class B : public A
{
    int bar;
};

class C : public A
{
    int baz;
};
Run Code Online (Sandbox Code Playgroud)

operator==为这些类重载的正确方法是什么?如果我让它们都是自由函数,那么B和C不能在没有强制转换的情况下利用A的版本.它还会阻止某人进行只有A引用的深度比较.如果我将它们作为虚拟成员函数,那么派生版本可能如下所示:

bool B::operator==(const A& rhs) const
{
    const B* ptr = dynamic_cast<const B*>(&rhs);        
    if (ptr != 0) {
        return (bar == ptr->bar) && (A::operator==(*this, rhs));
    }
    else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

再次,我仍然需要施放(并且感觉不对).有没有一种首选的方法呢?

更新:

到目前为止只有两个答案,但看起来正确的方式类似于赋值运算符:

  • 使非叶类抽象化
  • 在非叶类中受保护的非虚拟
  • 在叶类中公共非虚拟

任何用户尝试比较两个不同类型的对象都不会编译,因为基本功能受到保护,叶子类可以利用父类的版本来比较那部分数据.

c++ operator-overloading

48
推荐指数
4
解决办法
7万
查看次数

C从int转换为char

我有一个简单的代码

char t =(char)(3000);

那么t的值是-72.十六进制值3000是0xBB8.我不明白为什么t的值是-72.

谢谢你的回答.


关于Mac,我不知道.所以我的结果是-72.据我所知,MAC正在使用Big Endian,它会影响结果吗?我没有任何MAC计算机进行测试,所以我想知道MAC人员.

c

2
推荐指数
1
解决办法
1080
查看次数

Visual Studio中的"Detach All"选项发生了什么变化?

我习惯使用调试菜单上的"全部分离"功能,允许我返回编辑和编译,以便稍后重新附加.

安装Windows 7 64位后,此菜单选项消失了.我从其他人那里听说它在32位Vista下也不存在.

对于记录,调试控制台应用程序时会显示该选项.到目前为止,我只注意到它在Web应用程序中丢失了.

编辑:所以,如果我只调试一个简单的Web应用程序,其中没有其他东西,那么Detach All选项就在那里.需要找出我一直在尝试调试但没有它的(多个)项目的不同之处.

debugging visual-studio-2008

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

为什么Ada没有垃圾收集器?

我知道GC在Ada开发的时代并不受欢迎,对于嵌入式编程的主要用例,它仍然不是一个好的选择.

但是考虑到Ada是一种通用编程语言,为什么不是部分和可选的(仅跟踪显式标记的内存对象)垃圾收集器在后来的语言版本和编译器实现中引入.

我根本想不到开发一个没有垃圾收集器的普通桌面应用程序了.

garbage-collection ada

12
推荐指数
4
解决办法
5690
查看次数

VIM在文件.git/COMMIT_EDITMSG中设置拼写

我想在git中编辑提交文本时自动"设置拼写".从%我看到它正在写入名为.git/COMMIT_EDITMSG的文件名.如何更新我的.vimrc以在编辑该文件时自动设置拼写.什么就行了

if(filename有一个单词COMMIT)

设置咒语

科幻

vim

27
推荐指数
5
解决办法
4323
查看次数

.NET中的格雷码

在.NET框架中的任何地方都有内置的格雷码数据类型吗?或者Gray和binary之间的转换实用程序?我可以自己做,但如果轮子已经发明了......

.net c# error-checking gray-code

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

T-SQL:按日期排序,然后分组?

假设我有一个如下所示的数据库表:

ID          name       salary      start_date              city       region
----------- ---------- ----------- ----------------------- ---------- ------
          1 Jason            40420 1994-02-01 00:00:00.000 New York   W
          2 Robert           14420 1995-01-02 00:00:00.000 Vancouver  N
          3 Celia            24020 1996-12-03 00:00:00.000 Toronto    W
          4 Linda            40620 1997-11-04 00:00:00.000 New York   N
          5 David            80026 1998-10-05 00:00:00.000 Vancouver  W
          6 James            70060 1999-09-06 00:00:00.000 Toronto    N
          7 Alison           90620 2000-08-07 00:00:00.000 New York   W
          8 Chris            26020 2001-07-08 00:00:00.000 Vancouver  N
          9 Mary             60020 2002-06-09 00:00:00.000 Toronto    W
Run Code Online (Sandbox Code Playgroud)

是否可以通过start_date降序对其进行排序,然后通过最新的start_date对每个城市组进行排序?例如: …

sql t-sql group-by

5
推荐指数
2
解决办法
7160
查看次数

通过os.system()激活virtualenv

我正在编写一个基于Python的shell脚本来使用virtualenv,pip和fabric来构建一个Django应用程序.应该很简单,但似乎我无法通过shell脚本激活和运行virtualenv中的命令.

os.system('virtualenv %s --no-site-packages' % project_name)
os.system('source %s/bin/activate' % project_name)
os.system('easy_install pip')
Run Code Online (Sandbox Code Playgroud)

运行时,出错:

$ startproject+ -s false sample
New python executable in sample/bin/python
Installing setuptools............done.
/testing
Searching for pip
Best match: pip 0.4
Processing pip-0.4-py2.6.egg
pip 0.4 is already the active version in easy-install.pth
Installing pip script to /usr/local/bin
error: /usr/local/bin/pip: Permission denied
Run Code Online (Sandbox Code Playgroud)

显然这source条线路没有运行,但为什么呢?它是一个并发/线程问题,还是更深层次的virtualenv?

谢谢!

python django pip virtualenv fabric

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

这个C++标头的布局方式有什么问题吗?

#pragma once
#include "LudoCore/Singleton.h"

class LudoTimer : public Singleton<LudoTimer>
{
    friend class Singleton<LudoTimer>;

public:
    void Update();
    void ShortenDay();
    void LengthenDay();
    UINT64 GetDeltaTime() const;
    float GetPercentageOfDayElapsed() const;

private:
    LudoTimer();
    ~LudoTimer();

    UINT64 GetTickCount64() const;
    UINT64 GetElapsedSeconds() const;

    UINT64 m_DeltaTime;

    // Tick Count
    UINT64 m_CurrFrameTick;
    UINT64 m_LastFrameTick;

    int m_SecondsInADay;
    static const int SHORTEST_POSSIBLE_DAY = 60;
    static const int LONGEST_POSSIBLE_DAY = 86400;
    static const int CHANGING_INTERVAL = 600;
};
Run Code Online (Sandbox Code Playgroud)

对我来说,上面的代码看起来很正常.但是,我是C++的新手,所以我可能会遗漏一些细微差别.我从中得到了一堆编译器错误,例如:

错误C2447:'{':缺少函数头(旧式正式列表?)

错误C2236:意外的"类"'LudoTimer'.你忘记了';'吗?

是什么赋予了!

c++

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