我发现我经常不确定我有多少缩进的东西,我在哪里放了新的行等等.是否有关于如何在Haskell中布局空白的官方或广泛遵循的指导方针?请注意,我不是在问什么是合法的; 我问的是什么是好的做法,沿着if/else控制块的Good Haskell编码风格?,但更普遍.我特别热衷于了解人们对do-block,let-blocks,where-blocks和case语句的处理方式,特别是当这些事物彼此嵌套或在多个函数定义中嵌套时.
如果在 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)
足够。
我正在尝试为另一个命名空间中定义的类型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++ 代码的 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) 在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. 有谁知道为什么?
我正在实现一个API和C++ SDK,它将为给定的纬度/经度返回两个字母的国家代码,如"US".这些ISO 3166-1 alpha-2已有详细记载,但没有适用于国际水域的代码.在这种情况下应该返回什么约定?
以下代码在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.
许多语言都支持不可变类型 - 一旦构造了这种类型的值,就无法以任何方式对其进行修改.我不会偏离这些类型的好处,因为这已在其他地方广泛讨论过.(参见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++ fn
foo(input, std::initializer_list<Option> options);
Run Code Online (Sandbox Code Playgroud)
我需要从另一种格式的数据构建一个选项列表,并将它们传递给foo.我无法看到以std::initializer_list 编程方式构建的方法- 这是对的吗?(如果一个人被迫使用更标准的容器,那将是有意义的,但我想在重新分解之前进行检查.)