- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在制作名为 Dots and Boxes 的游戏。
网格上有一堆点:
<table>
<tr>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
</tr>
<tr>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
</tr>
</table>
当你点击框的一侧时,它变成黑色:
function addLine(obj) {
console.log("Called")
if (obj.style.backgroundColor != "black") {
obj.style.backgroundColor = "black";
changeTurn()
}
一旦你点击第四边,关闭盒子,盒子就会变成点击第四边的玩家的颜色:
目前,玩家必须手动点击方框来改变它的颜色。但是,我希望当盒子周围的所有四个边都是黑色时,它会自动用颜色填充盒子。
如何使用 Javascript 中的函数来检查框的上方、下方、左侧和右侧的行是否填充为黑色?
var playerTurn = "Blue";
changeTurn();
var number = 0;
function addLine(obj) {
console.log("Called")
if (obj.style.backgroundColor != "black") {
obj.style.backgroundColor = "black";
changeTurn()
}
}
function fillBox(obj) {
if (playerTurn == "Blue") {
obj.style.backgroundColor = "red";
}
else if ( playerTurn == "Red") {
obj.style.backgroundColor = "blue";
}
}
function changeTurn() {
if (playerTurn == "Red") {
playerTurn = "Blue";
document.getElementById('turn').style.color = "blue";
}
else if (playerTurn == "Blue") {
playerTurn = "Red";
document.getElementById('turn').style.color = "red";
};
console.log(playerTurn);
document.getElementById('turn').innerHTML = playerTurn + "'s Turn";
}
h3 {
font-family: Arial;
}
table {
border-collapse: collapse;
}
.vLine {
width: 10px;
height: 60px;
}
.box {
width: 60px;
height: 60px;
}
.hLine {
width: 60px;
height: 10px;
}
.gap {
width: 10px;
height: 12px;
background-color: black;
}
.vLine:hover, .hLine:hover {
background-color: black;
}
<h3 id="turn"></h3>
<table>
<tr>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
</tr>
<tr>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
</tr>
<tr>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
</tr>
<tr>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
</tr>
<tr>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
</tr>
<tr>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
</tr>
<tr>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
</tr>
<tr>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
</tr>
<tr>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
</tr>
<tr>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
</tr>
<tr>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
</tr>
<tr>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
<td class="box" onclick="fillBox(this)"></td>
<td class="vLine" onclick="addLine(this)"></td>
</tr>
<tr>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
<td class="hLine" onclick="addLine(this)"></td>
<td class="gap"></td>
</tr>
</table>
最佳答案
这相当简单,尽管它需要很好地使用 DOM 遍历。
当您单击一条线时,最多只有 两个 可能的框可以填充。对于水平线,它们是上方和下方的框,这需要跳行。对于垂直线,左和右。
对于这些框中的每一个,我们需要确认四行。同样,我们必须跳转上方和下方的行。
实际上,我已经重新制作了这款游戏,大部分是因为它很有趣,而且有很多东西需要学习。那么让我们来看看重要的部分。我们将避免这段代码中的不良形式,例如内联处理程序和直接在元素上设置样式,我们将让 CSS 类充当控件,尽管更完整的选项是 data-attributes
。
让我们从两个基本的辅助函数开始。
第一个用于将类似数组的对象转换为实际的数组,因此我们可以对它们使用 Array.prototype
方法。我们主要在 nodeList
对象上使用它。
function toArray (o) {
return Array.prototype.slice.call(o);
}
第二个利用第一个,并为我们提供元素在其 parentNode
中的位置。
function nodeIndex (node) {
return toArray(node.parentNode.children).indexOf(node);
}
接下来,我们的事件处理程序。他们彼此非常相似。当我们点击一行时,我们用另一个辅助函数 fill
填充该行,它向名为 .filled
的行添加一个新类。然后我们检查可以填写的框。对于水平线,即上方和下方的垂直框;对于水平框的垂直线,左和右。我们删除了事件监听器,因此只能单击一次行。
function addHLine (e) {
fill(this);
this.removeEventListener(e.type, addHLine);
checkVerticalBoxes(this);
updateGame();
}
function addVLine (e) {
fill(this);
this.removeEventListener(e.type, addVLine);
checkHorizontalBoxes(this);
updateGame();
}
现在让我们看看 checkHorizontalBoxes
和 checkVerticalBoxes
。水平框位于同一行,从我们的起始行开始索引 +/-1
。垂直框位于从我们的起始行开始索引为 +/-1
的行中,并与该行共享相同的索引。我们有一些 if
语句,因为有时可能的行或框会越界。
function checkHorizontalBoxes (line) {
var left = line.previousElementSibling,
right = line.nextElementSibling;
if (left) checkSurroundingLines(left);
if (right) checkSurroundingLines(right);
}
function checkVerticalBoxes (line) {
var index = nodeIndex(line),
up = line.parentNode.previousElementSibling,
down = line.parentNode.nextElementSibling;
if (up) checkSurroundingLines(up.children[index]);
if (down) checkSurroundingLines(down.children[index]);
}
这两个函数都在潜在的框上调用 checkSurroundingLines
。此函数调用另外两个函数 - checkVerticalLines
和 checkHorizontalLines
。开始看到模式了吗? isFilled
类似于fill
,它是我们定义的辅助函数,用于测试一行是否具有类.filled
。
function checkHorizontalLines (node, idx) {
var left = node.previousElementSibling,
right = node.nextElementSibling;
return isFilled(left) && isFilled(right);
}
function checkVerticalLines (node, idx) {
var row = node.parentNode,
up = row.previousElementSibling.children[idx],
down = row.nextElementSibling.children[idx];
return isFilled(up) && isFilled(down);
}
如果两者都返回 true
,我们将填充我们的框。
这是这种 DOM 遍历的基本逻辑。实际代码还有一些额外的内容,因此请阅读所有部分。
这是工作游戏:
// Player objects
function Player (name, className, scoreBox) {
this.name = name;
this.className = className;
this.scoreBox = scoreBox;
this.score = 0;
}
// State
var players = [new Player('Blue', 'blue-mark', 'p1'),
new Player('Red', 'red-mark', 'p2')],
currentPlayerIdx = 0,
currentPlayer = players[currentPlayerIdx],
turnBox = document.getElementById('turn');
// Helpers
function toArray (o) {
return Array.prototype.slice.call(o);
}
function nodeIndex (node) {
return toArray(node.parentNode.children).indexOf(node);
}
function fill (el) {
el.classList.add('filled');
}
function isFilled (el) {
return el.classList.contains('filled');
}
// Checks
function checkHorizontalLines (node, idx) {
var left = node.previousElementSibling,
right = node.nextElementSibling;
return isFilled(left) && isFilled(right);
}
function checkVerticalLines (node, idx) {
var row = node.parentNode,
up = row.previousElementSibling.children[idx],
down = row.nextElementSibling.children[idx];
return isFilled(up) && isFilled(down);
}
function checkSurroundingLines (node) {
var idx = nodeIndex(node),
surrounded = checkVerticalLines (node, idx) && checkHorizontalLines(node, idx);
if (surrounded) {
node.classList.add('marked');
node.classList.add(currentPlayer.className);
return true;
}
}
function checkHorizontalBoxes (line) {
var left = line.previousElementSibling,
right = line.nextElementSibling;
if (left) checkSurroundingLines(left);
if (right) checkSurroundingLines(right);
}
function checkVerticalBoxes (line) {
var index = nodeIndex(line),
up = line.parentNode.previousElementSibling,
down = line.parentNode.nextElementSibling;
if (up) checkSurroundingLines(up.children[index]);
if (down) checkSurroundingLines(down.children[index]);
}
// State sets
function setInfo () {
turnBox.className = currentPlayer.className;
turnBox.innerHTML = currentPlayer.name + "'s Turn";
players.forEach(function (p) {
document.getElementById(p.scoreBox).innerHTML = p.score;
});
}
function getScores() {
players.forEach(function (p) {
p.score = document.querySelectorAll('.box.marked.'+p.className).length;
});
}
function changeTurn () {
currentPlayerIdx = 1 - currentPlayerIdx;
currentPlayer = players[currentPlayerIdx];
setInfo();
}
function updateGame() {
getScores();
changeTurn();
}
// Events
function addHLine (e) {
fill(this);
this.removeEventListener(e.type, addHLine);
checkVerticalBoxes(this);
updateGame();
}
function addVLine (e) {
fill(this);
this.removeEventListener(e.type, addVLine);
checkHorizontalBoxes(this);
updateGame();
}
function assignHandler (sel, ev, fn) {
var els = document.querySelectorAll(sel);
toArray(els).forEach(function (el) {
el.addEventListener(ev, fn);
});
}
assignHandler('.hLine', 'click', addHLine);
assignHandler('.vLine', 'click', addVLine);
setInfo();
h3 {
font-family: Arial;
}
table {
border-collapse: collapse;
}
.vLine {
width: 10px;
height: 60px;
}
.box {
width: 60px;
height: 60px;
}
.hLine {
width: 60px;
height: 10px;
}
.gap {
width: 10px;
height: 12px;
background-color: #333;
}
.vLine:not(.filled):hover,
.hLine:not(.filled):hover {
background-color: #333;
}
.filled {
background-color: grey;
}
.marked {
background-color: green;
}
.box.blue-mark {
background-color: #3355ff;
}
.box.red-mark {
background-color: #ff5533;
}
#turn.blue-mark,
#p1 {
color: #3355ff;
}
#turn.red-mark,
#p2 {
color: #ff5533;
}
<h3 id="turn"></h3>
<p class="counts">
<span id="p1"></span> -
<span id="p2"></span>
</p>
<table>
<tr>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
</tr>
<tr>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
</tr>
<tr>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
</tr>
<tr>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
</tr>
<tr>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
</tr>
<tr>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
</tr>
<tr>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
</tr>
<tr>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
</tr>
<tr>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
</tr>
<tr>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
</tr>
<tr>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
</tr>
<tr>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
<td class="box"></td>
<td class="vLine"></td>
</tr>
<tr>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
<td class="hLine"></td>
<td class="gap"></td>
</tr>
</table>
关于javascript - 检查周围的表格单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31151150/
我试图要求 test/unit 的新版本(即不是与 ruby 捆绑的版本) .根据 instructions我用 gem i test-unit 安装它.但是现在当我需要 test/unit我似乎
简短版本是: 我有一个 systemd 单元,我想在调用时检查脚本的返回代码: systemctl status service.service 长版本:我有一个 lsb init 脚本正是这样做的,
我正在使用反射动态创建一个类的实例,这工作正常,除非尝试通过单元测试执行此操作 - 我使用的是 MS 测试框架。 我收到熟悉的错误:“无法加载文件或程序集‘Assy’或其依赖项之一。系统找不到指定的文
我想知道测试网站“界面功能”的最佳实践是什么。 我对哪些方法可用于测试界面和动态生成的内容感兴趣。特别是,我很难弄清楚是否可以为需要用户交互的操作创建自动化测试,或者这是否只是浪费时间,我应该让一些
我有一个简单的 Python 服务,其中有一个无限执行某些操作的循环。在各种信号上,sys.exit(0) 被调用,这导致 SystemExit 被引发,然后如果可以的话应该进行一些清理。 在测试中,
我正在使用 OpenCV 2.4.2 这是 OpenCV 文档中的引文 C++: void HoughLinesP(InputArray image, OutputArray lines, doubl
忙于 C# 中的自动化测试用例,我们需要在每次测试后恢复数据库快照。问题是,当运行多个测试时它会失败,因为“其他用户正在使用数据库时无法更改数据库状态。” 我们使用 SqlConnection.Cle
我阅读了 C# 规范并用谷歌搜索了它,但一无所获。 我 99% 肯定 C# 中没有像单元命名空间指令这样的功能,但问题是:为什么?是否有惯用或技术原因? 这很方便,尤其是当我们的大部分文件都由单个命名
我目前正在尝试向我的应用程序(一个非常老的项目......评论说 iOS 2.0)添加单元测试(精确的应用程序测试)并且总是偶然发现 undefined symbols for architectur
我正在使用Delphi 7,并且有一个新单元要在我的项目中使用。我已经编译了新的。当我尝试通过将其添加到uses子句在项目中使用此单元时,出现错误,提示未找到.dcu文件。我还尝试将文件的完整路径放在
场景:我需要编写一个复杂的nHibernate查询,该查询将返回预计的DTO,但是我想使用TDD方法。该方法如下所示: public PrintDTO GetUsersForPrinting(int
您可以通过运行以下命令在事件 html 设置中显示 Jupyter 笔记本: $ jupyter nbconvert untitled.ipynb --to slides --post serve 有
如何在一个网站上拥有多个 AdSense 单元? Google 提供的唯一代码是按单位计算的。 (adsbygoogle = window.adsbygoogle || []).push({})
我刚刚开始为大量代码编写测试。有很多类依赖于文件系统,即读取 CSV 文件、读/写配置文件等。 当前测试文件存储在项目(这是一个 Maven2 项目)的 test 目录中,但由于多种原因该目录并不总是
我对 TDD 还很陌生,在单元测试方面也不是很老练,所以才有这个问题。我有这个用 PHP 编写的遗留函数 function foo(){ x = bar(); y = baz();
我创建了一个程序,在 Swing 窗口的一侧显示结果过滤选项,但默认情况下它们水平相邻显示,这浪费了我在 BorderLayout 的西侧分配的空间。我可以在构造函数或添加语句中传递任何内容来将它们堆
标题不好的借口:如果有人能更好地描述它,请做。 我有一个 WeakList类,它“基本上”是一个 List> (虽然不是字面意义上的派生自列表,但它应该对用户完全透明)。 现在的基本思想是“如果引用的
我正在尝试在 UITableView 上添加两个原型(prototype)单元。但是,我不知道如何验证是否能够为每个原型(prototype)“返回”正确的单元格。你们能帮我一下吗? func ta
我正在使用 CloudKit 作为数据库创建一个简单的待办事项列表应用程序。目前我可以添加和删除对象,但对编辑对象感到困惑。 编辑项目 Controller protocol EditItemCont
我正在针对以下任务训练 RNN:给定一个包含 30 个单词的序列,然后将该序列分类为二进制类。 在我的网络中拥有超过 30 个单元(LSTM、GRU 或普通 RNN)有好处吗?我在网上看到过很多例子,
我是一名优秀的程序员,十分优秀!