我正在写一个网站,它将开始使用负载均衡器,我正试图绕过它.
看起来很多我一直在阅读的文章并没有真正给我一个直接的答案,或者我只是没有正确理解它们,我想了解真正的负载平衡如何从技术方面起作用,如果有人有任何代码可以分享,那也很好.
我知道缓存会成为一个问题,但这也是一个不同的主题,会话.
如果我有一个递归ADT
data MyType = A | B | C MyType | D MyType MyType
Run Code Online (Sandbox Code Playgroud)
我可以编写一个函数来确定是否MyType包含A类似的实例:
hasA :: MyType -> Bool
hasA A = True
hasA B = False
hasA (C x) = hasA x
hasA (D x y) = (hasA x) || (hasA y)
Run Code Online (Sandbox Code Playgroud)
这适用于非循环实例,但它不会停止循环结构,例如
let x = C x in hasA x
Run Code Online (Sandbox Code Playgroud)
相反,在这个例子中它应该返回False.在其他情况下(利用D),它将错误地停止而不是返回True.
那么,问题是我如何最容易地编写类似于hasA循环结构的函数?Racket以这种形式有一个特别好的功能define/fix,它允许你创建一个像hasA预期的那样的行为,并返回False上面例子中的结构,几乎没有任何额外的代码.有没有办法在Haskell中做类似的事情?它有延伸吗?
编辑:我现在发现define/fix实际上是由Matt Might创建的一个宏 …
假设我有一本字典:
x = {"x1":1,"x2":2,"x3":3}
Run Code Online (Sandbox Code Playgroud)
我有另一本字典:
y = {"y1":1,"y2":2,"y3":3}
Run Code Online (Sandbox Code Playgroud)
有没有任何巧妙的方法来构建前两个字典中的第三个字典:
z = {"y1":1,"x2":2,"x1":1,"y2":2}
Run Code Online (Sandbox Code Playgroud) 我与列表理解有一种爱/恨的关系.一方面我认为它们整洁优雅.另一方面,我讨厌阅读它们.(特别是那些我没写的)我通常遵循规则,让它可读,直到需要速度.所以我的问题在这一点上确实是学术性的.
我想要一张表格中的电台列表,这些电台的字符串通常有额外的空格.我需要剥掉那些空间.有时这些站是空白的,不应包括在内.
stations = []
for row in data:
if row.strip():
stations.append(row.strip())
Run Code Online (Sandbox Code Playgroud)
这转化为这个列表理解:
stations = [row.strip() for row in data if row.strip()]
Run Code Online (Sandbox Code Playgroud)
这种方法效果很好,但我发现我正在做两次剥离.我猜测.strip()实际上并不需要两次,并且通常比分配变量慢.
stations = []
for row in data:
blah = row.strip()
if blah:
stations.append(blah)
Run Code Online (Sandbox Code Playgroud)
事实证明我是对的.
> Striptwice list comp 14.5714301669
> Striptwice loop 17.9919670399
> Striponce loop 13.0950567955
Run Code Online (Sandbox Code Playgroud)
Timeit显示在两个循环段之间,第二个(条带一次)更快.这里没有真正的惊喜.令我感到惊讶的是,列表理解只是略微慢一些,即使它正在做两次.
我的问题:有没有办法写一个列表理解,只做一次剥离?
结果:
以下是建议的时间结果
# @JonClements & @ErikAllik
> Striptonce list comp 10.7998494348
# @adhie
> Mapmethod loop 14.4501044569
Run Code Online (Sandbox Code Playgroud) NullReferenceException当我运行此代码时,我发现了一个意外,省略了fileSystemHelper参数(因此将其默认为null):
public class GitLog
{
FileSystemHelper fileSystem;
/// <summary>
/// Initializes a new instance of the <see cref="GitLog" /> class.
/// </summary>
/// <param name="pathToWorkingCopy">The path to a Git working copy.</param>
/// <param name="fileSystemHelper">A helper class that provides file system services (optional).</param>
/// <exception cref="ArgumentException">Thrown if the path is invalid.</exception>
/// <exception cref="InvalidOperationException">Thrown if there is no Git repository at the specified path.</exception>
public GitLog(string pathToWorkingCopy, FileSystemHelper fileSystemHelper = null)
{
this.fileSystem = fileSystemHelper ?? new FileSystemHelper(); …Run Code Online (Sandbox Code Playgroud) 我试图在Python中截断一个十进制值.我不想舍入它,而只是显示小数值达到指定的精度.我尝试了以下方法:
d = 0.989434
'{:.{prec}f}'.format(d, prec=2)
Run Code Online (Sandbox Code Playgroud)
这使其达到0.99.但我实际上希望输出为0.98.显然,round()不是一种选择.有没有办法做到这一点?或者我应该回到代码并将所有内容更改为decimal?
谢谢.
MS Visual Studio 2013.
两者When和ItemGroup元素都可以具有Condition属性(正如我在MSDN中看到的那样).但我得到了不同的结果.
如果$(CAD_Year)是2015年,我预计AcRibbon将不会 referensed到我的项目:
<ItemGroup Condition= "'$(CAD_Year)' < '2010'" >
<Reference Include="AcRibbon">
<HintPath>$(CAD_SDK_Location)\$(Inc)\AcRibbon.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
但是我AcRibbon总是在解决方案浏览器中得到未解决的参考.
但这个变种工作正常:
<Choose>
<When Condition= "'$(CAD_Year)' < '2010'">
<ItemGroup>
<Reference Include="AcRibbon">
<HintPath>$(CAD_SDK_Location)\$(Inc)\AcRibbon.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
</When>
</Choose>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,AcRibbon只有在$(CAD_Year)低于2010年才会被引用.为什么我得到不同的结果?
如何将git存储库镜像到Gerrit?
我会做的:
[git repository for libdrm] - >我的gerrit < - >开发人员
Gerrit从freedesktop git存储库下载更改.开发人员从gerrit克隆存储库并推入gerrit.开发人员从不将更改推送到主存储库.
我用gerrit创建了新项目.我下载了存储库:
git clone http://anongit.freedesktop.org/git/mesa/drm.git
Run Code Online (Sandbox Code Playgroud)
我会把这个存储库推到gerrit,但我不能,因为我有错误:
remote: ERROR: In commit ced219ebbd3b266ac8326223bad62f994907ae6b
remote: ERROR: committer email address chris@chris-wilson.co.uk
remote: ERROR: does not match your user account.
remote: ERROR:
remote: ERROR: The following addresses are currently registered:
remote: ERROR: xxx@example.com
remote: ERROR:
remote: ERROR: To register an email address, please visit:
remote: ERROR: http://mygerrit-server/#/settings/contact
Run Code Online (Sandbox Code Playgroud)
我有所有人的权利.我怎么能把镜子添加到gerrit?
我有一个函数说foo :: [Integer] - > Bool,但只有当传入的参数对某些条件有效时它才有效,否则它应该立即终止.
foo x | not $ isSorted x = False
| otherwise = some_recursive_stuff_here
where
isSorted ax = ax == sort ax
Run Code Online (Sandbox Code Playgroud)
等等
但是我不希望每次都检查它是否已经排序.有没有一种好方法可以处理其他内容然后引入另一个内部函数?
每当我运行以下程序时,返回的值总是6或13.
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
//void randomLegs();
//void randomPush();
//void randomPull();
//void randomMisc();
int main(int argc, const char * argv[])
{
srand(time(NULL));
//randomLegs();
cout << rand() % 14;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在今天和昨天,我已经将程序运行了近百次.
谁能告诉我我做错了什么?
谢谢.
编辑:顺便说一句,如果我将rand()的范围改为13或15,它就可以了.