小编Moh*_*han的帖子

Haskell缩进风格

我发现我经常不确定我有多少缩进的东西,我在哪里放了新的行等等.是否有关于如何在Haskell中布局空白的官方或广泛遵循的指导方针?请注意,我不是在问什么是合法的; 我问的是什么是好的做法,沿着if/else控制块Good Haskell编码风格?,但更普遍.我特别热衷于了解人们对do-block,let-blocks,where-blocks和case语句的处理方式,特别是当这些事物彼此嵌套或在多个函数定义中嵌套时.

haskell coding-style indentation

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

删除在 Github 上使用 <user> 提交的 <user>

我在 github 上有许多提交,如下所示:

在此处输入图片说明

有没有一种重新定位的方法,以便我可以摆脱这种情况,而只需将提交标记为我?

git rebase

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

在 Gradle 中:将 Scala 编码设置为 UTF-8

如果在 Gradle 中编译 Java,您可以通过设置编码

compileJava.options.encoding = 'UTF-8'
Run Code Online (Sandbox Code Playgroud)

我无法让它与 Scala 一起工作;我已经尝试了所有这些:

compileJava.options.encoding = 'UTF-8'

compileScala.options.encoding = 'UTF-8'

compileScala {
    scalaCompileOptions.encoding = 'utf-8'
}

compileScala {
    scalaCompileOptions.additionalParameters = ["-encoding UTF-8"]
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激。

编辑:关闭,因为这是我的测试方法有问题。我本来就JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8定的;我试图通过在 Gradle 文件中设置编码来替换它。

为了测试,我试图打印出一个 Unicode 字符,但在删除 envvar 并尝试上述选项后,它没有正确打印。原因是这JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8不仅会影响输入文件的编码,还会影响System.out. 用

System.setOut(new PrintStream(System.out, true, "UTF-8")) 
Run Code Online (Sandbox Code Playgroud)

修复的东西。以供参考,

compileJava.options.encoding = 'UTF-8'
compileScala {
    scalaCompileOptions.encoding = 'UTF-8'
}
Run Code Online (Sandbox Code Playgroud)

足够。

scala gradle

5
推荐指数
0
解决办法
1183
查看次数

使用具有boost :: optional的相等运算符

我正在尝试为另一个命名空间中定义的类型T定义一个等于运算符,然后使用相等运算符optional<T>.在clang(Apple LLVM 9.1.0)上,此代码:

    namespace nsp {
        struct Foo {
        };
    }
    bool operator==(const nsp::Foo& a, const nsp::Foo& b);

    void foo() {
        optional<nsp::Foo> a = none;
        optional<nsp::Foo> b = none;
        if (a == b)
            ;
    }
Run Code Online (Sandbox Code Playgroud)

导致错误:

/usr/local/include/boost/optional/detail/optional_relops.hpp:29:34: error: invalid operands to binary expression ('const nsp::Foo' and 'const nsp::Foo')
{ return bool(x) && bool(y) ? *x == *y : bool(x) == bool(y); }
                      ~~ ^  ~~
MWE.cpp:40:19: note: in instantiation of function template specialization 'boost::operator==<what3words::engine::nsp::Foo>' requested here
            if (a …
Run Code Online (Sandbox Code Playgroud)

c++ boost argument-dependent-lookup

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

为具有(模拟)可选/默认参数的函数编写 Javadoc

我有一些 C++ 代码的 Java 包装器,在其中我通过手动重载相关方法来模拟默认参数。[示例如Java 是否支持默认参数值?.] 在一种情况下,C++ fn 有 3 个可选参数,因此我必须用 Java 编写 8 个方法。

现在我想为所述方法编写JavaDocs。有什么办法可以避免将基本相同的文本写 8 次吗?除了冗长之外,这将是一场维护噩梦......

编辑:这是一个玩具示例,说明了方法的签名:

void foo(int i, String s, double d);
void foo(int i, String s);
void foo(int i, double d);
void foo(int i);
void foo(String s, double d);
void foo(String s);
void foo(double d);
void foo();
Run Code Online (Sandbox Code Playgroud)

java javadoc default-value optional-parameters

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

实验::可选的“nullopt_t”命名原理

boost::optionalC ++库有“无值”所指示boost::none,这是一个精心选择的名称作为像代码

f(..., optional<T> default_argument = boost::none)
Run Code Online (Sandbox Code Playgroud)

或者

f(..., optional<T> default_argument = none)
Run Code Online (Sandbox Code Playgroud)

可读性很强——意图清楚地传达给读者。它也类似于其他语言的标准类中提供的“无值”。这个 Boost 库被吸收到标准 as 中std::experimental::optional,但none被重命名为难以理解的nullopt_t. 有谁知道为什么?

c++ boost optional

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

国际水域的国家代码

我正在实现一个API和C++ SDK,它将为给定的纬度/经度返回两个字母的国家代码,如"US".这些ISO 3166-1 alpha-2已有详细记载,但没有适用于国际水域的代码.在这种情况下应该返回什么约定?

country-codes

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

如何移动 - 构建C++ STL映射?

以下代码在GCC 4.9.3下引发错误.

    #include <map>
    using namespace std;

    struct Movable {
        Movable(const Movable&) = delete;
        Movable(Movable&&) = default;
    };

    class Foo {
        const map<int, Movable> m;
        Foo(map<int, Movable>&& _m) : m{_m} {}
    };
Run Code Online (Sandbox Code Playgroud)

潜在的错误是use of deleted function 'Movable::Movable(const Movable&)'- 但AFAICS它不应该试图复制底层的Movable.

c++ stl move-constructor move-semantics

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

C++是否支持与STL兼容的不可变记录类型?

许多语言都支持不可变类型 - 一旦构造了这种类型的值,就无法以任何方式对其进行修改.我不会偏离这些类型的好处,因为这已在其他地方广泛讨论过.(参见http://codebetter.com/patricksmacchia/2008/01/13/immutable-types-understand-them-and-use-them/)

我想在C++中创建一个轻量级的不可变记录类型.这样做的一个显而易见的方法是const所有成员.例如:

struct Coordinates {
    const double x;
    const double y;
};
Run Code Online (Sandbox Code Playgroud)

不幸的是,以这种方式声明的类型不支持复制赋值,因此不能与STL容器一起使用,这是一个相当致命的缺点.我认为没有任何方法可以解决这个问题,但如果有人能看到,我会很感激.

至于它的价值,据我所知,C++正在混淆两件事:a)你是否可以为变量赋值,b)是否可以在构造之后修改"values"(= objects).在例如Scala中,区别更加清晰

  • valvs var:a var可以有一个绑定到它的新值,一个val不能
  • 不可变和可变对象,尤其是集合

所以我可以写下面的内容:

val val_mutable = collection.mutable.Map(1 -> "One")
val val_immutable = collection.immutable.Map(1 -> "One")
var var_mutable = collection.mutable.Map(1 -> "One")
var var_immutable = collection.immutable.Map(1 -> "One")
Run Code Online (Sandbox Code Playgroud)

vars可以反弹以指向其他值:

//FAILS: val_immutable = collection.immutable.Map(2 -> "Two")
//FAILS: val_mutable = collection.mutable.Map(2 -> "Two")
var_mutable = collection.mutable.Map(2 -> "Two")
var_immutable = collection.immutable.Map(2 -> "Two")
Run Code Online (Sandbox Code Playgroud)

可修改的集合可以修改: …

c++ const mutable immutability

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

是否可以以编程方式构造std :: initializer_list?

我正在包装表单的C++ fn

foo(input, std::initializer_list<Option> options);
Run Code Online (Sandbox Code Playgroud)

我需要从另一种格式的数据构建一个选项列表,并将它们传递给foo.我无法看到std::initializer_list 编程方式构建的方法- 这是对的吗?(如果一个人被迫使用更标准的容器,那将是有意义的,但我想在重新分解之前进行检查.)

c++ initializer-list

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