scala.Predef
包含以下代码:
// Apparently needed for the xml library
val $scope = scala.xml.TopScope
Run Code Online (Sandbox Code Playgroud)
有人想出为什么它是必要的,考虑到它创建了可能很容易从标准库中分离出来的包的依赖关系?
我想将一组类似的函数分组到 scala 的库中。这是我在其他地方看到的两种方法。我想了解两者之间的差异。
// src/main/scala/com/example/toplevel/functions.scala
package com.example.toplevel
object functions {
def foo: Unit = { ... }
def bar: Unit = { ... }
}
Run Code Online (Sandbox Code Playgroud)
// src/main/scala/com/example/toplevel/package.scala
package com.example.toplevel
package object functions {
def foo: Unit = { ... }
def bar: Unit = { ... }
}
Run Code Online (Sandbox Code Playgroud)
据我所知,第一种方法需要functions
在您想要使用其功能时显式导入该对象。而包对象方法允许包中的任何内容functions
访问这些方法而无需导入它们。
即,com.example.toplevel.functions.MyClass
可以隐式访问com.example.toplevel.functions.foo
。
我的理解正确吗?
如果 中没有定义类com.example.toplevel.functions
,则这些方法似乎是等效的,这是正确的吗?
我正在研究应该从C和C ++使用的某些库头文件。由于C没有命名空间概念,因此我将在头文件中定义的所有名称中添加“库前缀”。相比之下,对于C ++,我将定义一个名称空间。所以我目前认为设计是这样的:
mylib.h
#ifdef __cplusplus
namespace mylib{
#define NAME_PREFIX(identifier) identifier
extern "C" {
#else
#define NAME_PREFIX(identifier) mylib_identifier
#endif
int NAME_PREFIX(foo)(void);
//other declarations go here
#ifdef __cplusplus
} //extern "C"
} //namespace mylib
#endif
Run Code Online (Sandbox Code Playgroud)
我从未见过这样的东西,所以我不确定这是否常见。不鼓励这样做吗?有哪些可能的缺点?
我正在使用sqlite3作为基础为我的应用程序构建数据库库.我想像这样构造它:
db/ __init__.py users.py blah.py etc.py
所以我会用Python做到这一点:
import db
db.users.create('username', 'password')
Run Code Online (Sandbox Code Playgroud)
我正在分析如何处理数据库连接的分析瘫痪(哦不!).我真的不想在这些模块中使用类,能够创建一堆可以以相同方式操作同一数据库的"用户"对象似乎并不合适 - 因此继承连接是不走.
我是否应该与所有模块使用的数据库建立一个全局连接,然后将其放在每个模块中:
#users.py
from db_stuff import connection
Run Code Online (Sandbox Code Playgroud)
或者我应该为每个模块创建一个新连接并保持活着吗?
或者我应该为每个交易创建一个新连接?
这些数据库连接应该如何使用?对于游标对象也是如此:我是否为每个事务创建一个新游标?为每个数据库连接只创建一个?
在阅读Microsoft's implementation of Cpp Core Guidelines 时,我遇到了两个问题:
gsl::string_span
在gsl::span
已经运行良好的地方提供?gsl::zstring_span
在std::string
自 C++11 以来已保证以空值终止的地方提供?任何说明情况都将受到高度赞赏。
我有一个基类,打算由我正在编写的代码的其他用户继承,其中一个抽象函数返回对象的名称。由于项目的性质,名称不能包含空格。
class MyBaseClass {
public:
// Return a name for this object. This should not include whitespace.
virtual const char* Name() = 0;
};
Run Code Online (Sandbox Code Playgroud)
有没有办法在编译时检查Name()
函数的结果是否包含空格?我知道constexpr
函数可以进行编译时操作,但我不确定以正确的方式向代码用户发出信号,告知他们的函数返回一个顽皮的字符串。
我也不清楚如何让constexpr
编译器实际执行一个函数来执行这样的检查(如果constexpr
是这样的话)。
std :: this_thread命名空间有技术原因吗?为什么这个命名空间的成员不能被实现为std :: thread类的静态成员?
为什么以下代码编译C++11
而不在C++03
?(两个gcc
和cl
)
#include <string>
#include <iostream>
#include <fstream>
int main(int argc, char* argv[]) {
const std::string t("Hello");
std::ofstream out(t);
}
Run Code Online (Sandbox Code Playgroud)
为什么C++03
流不接受std::string
构造函数参数?这个决定是基于某些事情还是偶然发生的?
虽然我不是C语言的经验丰富的程序员,但我必须在工作中使用这种语言来构建一个静态库,它可以在SunOS和Win32上编译.这个库只有几个源文件及其相应的头文件(让我们说:a.c
,b.c
,a.h
和b.h
).项目在两个平台中编译,并mylib.a
生成库.
我的问题是如何将实现的函数暴露mylib.a
给其他项目,因为当我添加两者时a.h
,b.h
我得到一些宏重定义错误.
编辑:我发现宏重新定义错误是因为编译命令中的宏定义(与我的标题无关)并且它已经解决了:)但我仍然希望组织我的源文件和头文件.
我怀疑的是我是否修改a.h
并b.h
在外部使用,或者我是否应该专门创建一个头文件来声明这个库的接口(让我们说mylib.h
).我不想过度复杂化原始标题,但我不想让同一个标题保持同步...我想听听更有经验的C程序员关于他们的模式,每种方法的优点以及是否还有其他方法选项.
先感谢您.
编辑:似乎我没有提供足够的信息; 下面的模式试图显示我的文件是如何组织的:每个代码文件只包含其标题,每个标题都有一个保护条件,每个标题包含一个公共标题,这个公共标题包括所有标题.
// a.c ----
#include "a.h"
// b.c ----
#include "b.h"
// a.h ----
#ifndef GUARD_A_H
#define GUARD_A_H
# include "liball.h"
void function_prototypes_implemented_in_a();
#endif // GUARD_A_H
// b.h ----
#ifndef GUARD_B_H
#define GUARD_B_H
# include "liball.h"
void function_prototypes_implemented_in_b();
#endif // GUARD_B_H
// liball.h ----
#ifndef GUARD_LIBALL_H
#define GUARD_LIBALL_H
# include <time.h> // …
Run Code Online (Sandbox Code Playgroud) 我在玩弄Data.Functor.Contravariant
. 该phantom
方法引起了我的注意:
phantom :: (Functor f, Contravariant f) => f a -> f b
phantom x = () <$ x $< ()
Run Code Online (Sandbox Code Playgroud)
或者,更具体地说,对它的注释:
如果
f
两者都是Functor
,Contravariant
那么当您考虑每个类别的法律时,它实际上无法以任何有意义的能力使用它的论点。这种方法非常有用。当这两种情况存在,是合法的,我们有以下规律:fmap f ? phantom
,contramap f ? phantom
既然fmap f ? contramap f ? phantom
,为什么我们需要Contravariant
和Functor
实例?用另一种方式做这件事不是更方便:为一个类创建一个实例Phantom
,它引入了phantom
方法,然后自动为?Functor
和派生实例Contravariant
class Phantom f where
phantom :: f a -> f b …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个C#.NET Framework 4.0库.
我有这个代码:
public static byte GetBatchStatus(string connString)
{
if (string.IsNullOrEmpty(connString))
throw new ArgumentNullException("connString");
byte status;
using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = GetBatchStatusValueSQL;
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
object o = cmd.ExecuteScalar();
// Throws an ArgumentNullException if o is null.
if (o == null)
throw new ArgumentNullException("o");
status = Convert.ToByte(o);
}
return status;
}
Run Code Online (Sandbox Code Playgroud)
cmd.ExecuteScalar();
可以返回null,但Convert.ToByte(o);
返回0.
如果cmd.ExecuteScalar();
返回null则为错误,因为我正在寻找的值必须在数据库上.如果该值不在数据库上则是错误.
你会在这做什么?返回null或抛出异常?
我正在尝试清理我的用户 api,以便用户可以整齐地从单个包对象导入,并获取所有内容。我意识到我可以将我的包裹移动到顶部包裹中,但我想知道是否有办法执行以下操作(我知道这可能不是最佳实践):
我有以下软件包:
package org.Me.packages.packageA
case class A() {
// some implementation
}
package org.Me.packages.packageB
case class B() {
// some implementation
}
Run Code Online (Sandbox Code Playgroud)
现在这将需要导入表单:
import org.Me.packages.packageA.A
import org.Me.packages.packageB.B
Run Code Online (Sandbox Code Playgroud)
我被要求做的是以下内容:
package org.Me.combinedPackages
package object Combined {
import org.Me.packages.packageA.A
import org.Me.packages.packageB.B
}
Run Code Online (Sandbox Code Playgroud)
这样我的最终用户就可以简单地执行以下操作:
import org.Me.combinedPackages._
// access both a and b here
Run Code Online (Sandbox Code Playgroud)
从我在这里读到的,我理解这意味着嵌套导入是不可能的。
那么我想要做的事情是不可能的吗?我意识到存在其他方式。