假设我有一个简单的模型,models.py
可以通过Django Admin编辑:
class Range(models.Model):
gt = models.IntegerField('Greater than')
lt = models.IntegerField('Lesser than')
def clean(self):
if self.gt >= self.lt:
raise ValidationError('Incorrect range')
Run Code Online (Sandbox Code Playgroud)
问题:尽管以上代码在确保gt
小于的假设方面做得很好lt
,但是它也破坏了Django提供的其他基本验证。例如,如果我在Django admin中为这些字段输入了一些非数字数据,则会看到跨越多个屏幕的调试消息:
如果我clean(self)
从的定义中删除了覆盖的方法Range
,则此基本验证将再次开始正常工作:
但当然,现在我可以进入Range
以s gt
大于lt
。
我真的不知道我在做什么错,因为我只是按照https://docs.djangoproject.com/zh-CN/1.9/ref/models/instances/#validating-objects遵循Django文档
我的错误在哪里?如何正确地为我的表格提供验证?
假设我们在C或C++中有这样的代码:
foo(bar());
Run Code Online (Sandbox Code Playgroud)
在这种情况下,函数执行顺序是什么?
bar()
首先调用,并且foo()
在bar()
返回之前调用no ,在这种情况下foo()
传递返回值为bar()
?foo()
首先调用,并延迟调用,bar()
直到实际需要的参数foo()
值的代码foo()
?案例2可能对优化有用,应该foo()
像这样定义:
void foo(someType par) {
if(someTest())
baz1();
else
baz2(par);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,bar()
如果someTest()
返回,甚至可以完全跳过调用false
.
但是,案例2也会使程序员必须更加小心,因为它有时会导致细微的错误(例如重复发生).
根据C FAQ:http://c-faq.com/stdio/scanfprobs.html
我们不应该使用scanf
交互式输入输出,而是应该使用读取整行,fgets
然后尝试解析它sscanf
,如果sscanf
返回解析错误,则提示用户再次输入输入.
这个,IIUC,会导致这样的代码:
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int main()
{
char inpbuff[5];
signed char n;
bool read_correctly = false;
while(!read_correctly) {
printf("Please enter an 8bit number: ");
if(fgets(inpbuff, sizeof(inpbuff), stdin) == NULL)
return EXIT_FAILURE;
if(sscanf(inpbuff, "%hhd", &n) == 1)
read_correctly = true;
}
printf("You have entered: %hhd\n", n);
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
对我来说,如果用户键入的行超过提供的缓冲区大小,则此方法会产生问题fgets
.即使在上面的程序中,如果用户键入asdf
或者问题,也会出现问题asdf14
.
在这种情况下,理想情况下,我们应该忽略所有字符,直到我们看到'\n',忽略它\n
,然后再次要求用户提供他们的输入.这将导致这样的方法:
#include <stdio.h>
#include <stdbool.h>
#include …
Run Code Online (Sandbox Code Playgroud) 我想将完成的国际象棋游戏存储在数据库中,以支持用户观看重播。
到目前为止,我有一个单例GameManager
存储所有正在进行的游戏。因此,startup.cs
我有以下代码行:
services.AddSingleton<IBattleManager, BattleManager>();
Run Code Online (Sandbox Code Playgroud)
现在,我想BattleManager
访问DbContext
保存已完成的游戏。
public class BattleManager : IBattleManager
{
//...
private void EndGame(ulong gameId)
{
var DbContext = WhatDoIPutHere?
lock(gameDictionary[gameId])
{
DbContext.Replays.Add(new ReplayModel(gameDictionary[gameId]));
gameDictionary.Remove(gameId)
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否有可能实现这一目标?怎么样?
尝试失败:
public class BattleManager : IBattleManager
{
Data.ApplicationDbContext _context;
public BattleManager(Data.ApplicationDbContext context)
{
_context = context;
}
}
Run Code Online (Sandbox Code Playgroud)
这显然会失败,因为无法DbContext
像这样将EF Core 注入到Singleton服务中。
我有一种模糊的感觉,我应该做这样的事情:
using (var scope = WhatDoIPutHere.CreateScope())
{
var DbContext = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
DbContext.Replays.Add(new ReplayModel(...));
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方向吗?
我一直认为在C++中short
是一个整数类型.
但是,维基百科在本文中以浮点类型列出它:
https://en.wikipedia.org/wiki/Machine_epsilon
我糊涂了.
我很确定short
通常是一个整数,但是因为C++是一个有很多陷阱的巨大语言......我可能会问,在C++中是否有合法的,即使是模糊的方式short
用作浮点类型?
import Prelude hiding (Either (..))
data Tree a = Empty | Node a (Tree a) (Tree a)
instance Show a => Show (Tree a) where
show t = show ST t
data ShowableTree a = ST Int (Tree a)
instance Show a => Show (ShowableTree a) where
let
indent 0 = ""
indent n = "\t" ++ (indent n-1)
in
show (ST depth Empty) = (indent depth) ++ "()"
show (ST depth (Node n l r)) =
let
stl = …
Run Code Online (Sandbox Code Playgroud) 我有这样一张桌子:
<table>
<thead>
<tr>
<th>Name</th>
<th>Phone no.</th>
<th>Address</th>
<th>Wealth</th>
</tr>
</thead>
<tbody>
<tr>
<th>John Doe</th>
<td>00123456789</td>
<td>Morgue St. 21</td>
<td>$100,000</td>
</tr><tr>
<th>Mary Sue</th>
<td>00987654321</td>
<td>Impossible St. 12</td>
<td>$999,999,999,999,999</td>
</tr><tr>
<th>Cpt. Kirk</th>
<td>00999999999</td>
<td>Enterprise St. 22</td>
<td>$100,000,000</td>
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
嗯,这张桌很宽.现在我必须制作一个样式表,使网站适合在狭窄的屏幕上观看,如手机.所以我必须做这个宽桌子.
我在想这张桌子是否可以垂直显示,而不是水平显示.更具体地说,我在想它是否可以显示更像这样:
<ul>
<li><strong>John Doe:</strong>
<ul>
<li><em>Phone no.:</em> 00123456789</li>
<li><em>Address:</em> Morgue St. 21</li>
<li><em>Wealth:</em> $100,000</li>
</ul>
</li><li><strong>Mary Sue:</strong>
<ul>
<li><em>Phone no.:</em> 00987654321</li>
<li><em>Address:</em> Impossible St. 12</li>
<li><em>Wealth:</em> $999,999,999,999,999</li>
</ul>
</li><li><strong>Cpt. Kirk:</strong>
<ul>
<li><em>Phone no.:</em> 00999999999</li>
<li><em>Address:</em> Enterprise St. 22</li>
<li><em>Wealth:</em> $100,000,000 …
Run Code Online (Sandbox Code Playgroud)data Pair = P Int Int
instance Show Pair where
show (P n1 n2) = (show n1) ++ "\t" ++ (show n2)
Run Code Online (Sandbox Code Playgroud)
Result:
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help
\Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main ( labn.hs, interpreted )
Ok, modules loaded: Main.
*Main> show (P 5 6)
"5\t6"
Run Code Online (Sandbox Code Playgroud)
OK for a pair of ints this might be an …
假设我有一个角色c :: Char
。现在,我想看看它是否等于a
或isDigit
:
isAOrDigit = (||) <$> (=='a') <*> (isDigit)
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好。但现在我想看看它是否等于a
,isDigit
或介于d
和g
。不幸的是,由于||
仅接受2个参数,所以我不能说(||) <$> (=='a') <*> (isDigit) <*> (`elem`['d'..'g'])
。
有没有什么好办法可以写这个,还是我必须回到这个:
isACOrDigitOrDG c = c == 'a' || isDigit c || c `elem` ['d'..'g']
Run Code Online (Sandbox Code Playgroud)
?
my@comp:~/wtfdir$ cat wtf.sh
str1=$(echo "")
str2=$(echo "")
if [ $str1 != $str2 ]; then
echo "WTF?!?!"
fi
my@comp:~/wtfdir$ ./wtf.sh
WTF?!?!
my@comp:~/wtfdir$
Run Code Online (Sandbox Code Playgroud)
WTF正在这里?
我是如何编写以上代码的:谷歌搜索“ bash比较字符串”使我进入了该网站,其中说:
您可以使用if语句检查bash中两个字符串的相等和不相等。“ ==”用于检查是否相等,“!=”用于检查字符串的不平等。
但是我得到了以上吗?
我不明白什么?我究竟做错了什么?
我试图使绘制点在已知半径和中心的圆内移动.目前我能够在边界内生成点,但现在我需要让它们移动.
我有以下脚本来生成粒子的初始位置.
function [particle_gen] = generate(n,centre,radius)
%generates n particles in a circle with specified centre and radius
angle = 2 * pi * rand(n,1);
r = radius * sqrt(rand(n,1));
X = r.*cos(angle) + centre(1);
Y = r.*sin(angle) + centre(2);
plot(X,Y,'.k')
end
Run Code Online (Sandbox Code Playgroud)
我想为它们设置动画,使粒子以恒定的速度沿直线行进,直到它们撞到圆形边界并反弹.我需要这一切都发生在同一个情节中.
haskell ×3
c ×2
c++ ×2
string ×2
animation ×1
asp.net-core ×1
bash ×1
css ×1
django ×1
django-admin ×1
html ×1
html-table ×1
interactive ×1
io ×1
matlab ×1
printing ×1
short ×1
simulate ×1
singleton ×1
syntax-error ×1
validation ×1