Questions tagged «language-agnostic»

该标签用于非特定于编程语言或环境的问题。

3
在网格上随机生成有向图
我试图随机生成一个有向图,目的是制作类似于口袋妖怪的滑冰拼图游戏的拼图游戏。 本质上,这就是我希望能够随机生成的内容:http : //bulbanews.bulbagarden.net/wiki/Crunching_the_numbers : _Graph_theory。 我需要能够在x和y维度上限制图形的大小。在链接中给出的示例中,它将限于8x4网格。 我遇到的问题不是随机生成图,而是随机生成图,我可以在2d空间中正确地绘制它,因为我需要在节点的另一侧做一些事情(例如岩石)来制作它停止滑动时在视觉上有意义。这样做的问题是,岩石有时会终止于两个其他节点之间或可能位于另一个节点本身的路径中,这会导致整个图形损坏。 与几个我认识的人讨论了这个问题之后,我们得出了两个结论,可能会得出一个解决方案。 构造网格时,将网格中的障碍物包括在图中。 从一个完全填充的网格开始,然后绘制一条随机路径并删除将使该路径起作用的块。 然后问题就变成了要删除哪些,以避免引入额外的较短路径。我们还认为动态规划算法可能是有益的,尽管我们每个人都不擅长从零开始创建动态规划算法。关于此问题被正式称为(如果是官方图形问题)的任何想法或参考将是最有帮助的。 这是到目前为止我已经完成的一些示例,仅通过随机放置块并从选定的开始/结束位置生成导航图即可。想法(如上一链接所述)是从绿色S开始并想要到达绿色F。您可以通过向上/向下/向左/向右移动来实现此目的,并继续沿选定的方向移动,直到碰到一个壁。在这些图片中,灰色是墙,白色是地板,紫色线是从头到尾的最小长度,黑色线和灰色点表示可能的路径。 以下是一些随机生成图的不良示例: 以下是随机生成(或手动调整)图的一些好示例: 我似乎还注意到,实际上在玩拼图游戏时更具挑战性的是那些在最小路径上具有很多高次节点的游戏。

5
有没有语言不可知的单元测试框架?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 5年前关闭。 我一直对重写工作代码持怀疑态度-移植代码也不例外。但是,随着TDD和自动化测试的到来,重写和重构代码更加合理。 有谁知道是否存在可用于移植旧代码的TDD工具?理想情况下,您可以执行以下操作: 为通过的旧代码编写语言不可知的单元测试(如果发现错误,则失败)。 在失败的其他代码库上运行单元测试。 用通过测试的新语言编写代码,而无需查看旧代码。 另一种选择是将步骤1分为“用语言1编写单元测试”和“将单元2移植到语言2”,这将显着增加所需的工作量,并且很难证明是否要在维护旧代码库之后停止维护端口(也就是说,您无法在此代码库上获得持续集成的好处)。 编辑:值得注意在StackOverflow上的此问题。

2
事件冒泡通常如何工作,它是事件传播的同义词吗?
我试图围绕事件驱动的(子)系统中事件分配的一般工作原理和原则进行研究。 尽管我曾在很多场合使用过它,例如Javascript,Flash(动作脚本2和3),甚至一次都用PHP编写了一个简单的事件分配系统,但我从未真正理解过事件冒泡和/或很好地传播。 第一个问题: 事件冒泡是事件传播的同义词吗? 第二个问题: 我理解的是,当事件“冒泡”时,这意味着它在对象的层次结构中“移动”了吗? 第三个也是最重要的问题: 如果我对问题2的理解是正确的;通常如何“向上移动”对象的层次结构? 它通常意味着父对象“重新分派”相同的事件,以它的母公司(直到它到达根对象)?如果是这样; 层次结构中的所有这些对象是否需要听这些事件的子对象,还是我对事件冒泡的理解缺少重要的原则,而无需让父对象将自身注册为子对象事件的侦听器? 如果您可以通过一些简单的伪代码来说明这些基本原理,我将不胜感激。

9
学习国际象棋的规则
一个类似的问题询问计算机是否可以通过分析数千种游戏来学习以最佳方式下棋。 如果一台机器在开始和每次移动之后可以看几局棋(或几局跳棋)的棋盘状态,是否可以对它进行编程以学习游戏规则? 如果可以的话,这项工作在多大程度上(例如,它能够考虑到晋升或晋升)?哪种机器学习算法将使之成为可能?

7
解析XML的技术
我总是发现XML有点麻烦处理。我不是在谈论实现XML解析器:我是在谈论使用现有的基于流的解析器,例如SAX解析器,该解析器逐节点处理XML。 是的,为这些解析器学习各种API确实很容易,但是每当我查看处理XML的代码时,我总是发现它有些复杂。根本的问题似乎是XML文档在逻辑上被分离为各个节点,但是数据类型和属性通常与实际数据分离,有时通过多层嵌套。因此,当单独处理任何特定节点时,需要维护许多额外的状态以确定我们在哪里以及下一步需要做什么。 例如,给出一个典型XML文档的片段: <book> <title>Blah blah</title> <author>Blah blah</author> <price>15 USD</price> </book> ...如何确定何时遇到包含书名的文本节点?假设我们有一个简单的XML解析器,它就像一个迭代器,每次调用时,都会为我们提供XML文档中的下一个节点XMLParser.getNextNode()。我不可避免地发现自己正在编写如下代码: boolean insideBookNode = false; boolean insideTitleNode = false; while (!XMLParser.finished()) { .... XMLNode n = XMLParser.getNextNode(); if (n.type() == XMLTextNode) { if (insideBookNode && insideTitleNode) { // We have a book title, so do something with it } …


7
耦合。最佳实务
从这个线程开始,我开始 单例模式 这让我开始思考班级之间的耦合程度以及如何最好地实现松散耦合。请记住,我是一名新程序员(我的第一份工作开始已经四个月了),这确实是我对此的首要考虑,并且非常热衷于理解这一概念。 那么,究竟是松耦合还是重耦合呢?在当前(也是第一个项目)中,我正在研究ac#winforms项目,该项目的GUI部分创建对象和对其事件的订阅,当它们被触发时,GUI创建另一个对象(在本示例中为datagridview(一个类是我创建的,它包装了一个标准的datagridview并添加了其他功能)并将其附加到GUI。这是不好的结合还是好的? 我真的不想养成不良习惯并开始编写不好的代码,因此,我感谢您的答复。

4
乐观锁定不起作用怎么办?
我有以下这种情况: 用户向GET请求/projects/1并接收ETag。 用户从步骤1 开始使用ETag 进行PUT请求/projects/1。 用户/projects/1从步骤1 开始使用ETag 发出另一个PUT请求。 通常,第二个PUT请求将收到412响应,因为ETag现在已过时-第一个PUT请求修改了资源,因此ETag不再匹配。 但是,如果同时发送两个PUT请求(或者一个又一个发送)怎么办?在PUT#2到达之前,第一个PUT请求没有时间处理和更新资源,这导致PUT#2覆盖PUT#1。乐观锁定的全部目的是要避免这种情况的发生。



4
编译器如何从类型错误中恢复?
我已经阅读了几篇论文,文章和《编译器:原理,技巧和工具(第二版)》(第2版)(又称“龙书”)第4章第4.1.4节,它们都讨论了语法编译器错误恢复的主题。但是,在尝试了几种现代编译器之后,我发现它们还可以从语义错误以及语法错误中恢复。 我非常了解编译器从句法相关的错误中恢复的算法和技术,但是我并不完全理解编译器如何从语义错误中恢复。 我目前使用的访问者模式略有变化,以从我的抽象语法树生成代码。考虑我的编译器编译以下表达式: 1 / (2 * (3 + "4")) 编译器将生成以下抽象语法树: op(/) | ------- / \ int(1) op(*) | ------- / \ int(2) op(+) | ------- / \ int(3) str(4) 然后,代码生成阶段将使用访问者模式来递归地遍历抽象语法树并执行类型检查。将遍历抽象语法树,直到编译器到达表达式的最内层为止。(3 + "4")。然后,编译器会检查表达式的每一面,并发现它们在语义上不相等。编译器引发类型错误。这就是问题所在。编译器现在应该做什么? 为了使编译器能够从此错误中恢复并继续对表达式的外部部分进行类型检查,它必须从评估表达式的最内部部分到表达式的下一个内部部分返回某种类型(int或str)。但是它根本没有返回的类型。由于发生类型错误,因此没有推断出任何类型。 我提出的一种可能的解决方案是,如果确实发生类型错误,则应该引发错误,并且应该将一个特殊值(表示发生类型错误)返回给以前的抽象语法树遍历调用。如果先前的遍历调用遇到此值,则他们知道在抽象语法树中更深处发生类型错误,因此应避免尝试推断类型。尽管此方法确实有效,但效率似乎很低。如果表达式的最内层部分位于抽象语法树的深处,则编译器将不得不进行许多递归调用,而仅是意识到无法完成任何实际工作,而只需从每个返回即可。 我是否使用了上述方法(我对此表示怀疑)。如果是这样,效率不高吗?如果不是,那么编译器从语义错误中恢复时将使用什么方法?

4
有条件的副作用有没有可能?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我正在参加中间数据结构课程,作为进入美国每个人都听说过的大学的CS MS程序的先决条件。在课堂上写的一行代码引起了我的注意: if (a > 33 | b++ < 54) {...} 这不会在我的工作场所通过代码审查。如果您在面试中编写了这样的代码,这将是对您的重大打击。(除了附带条件的条件外,它还很聪明,但以清晰度为代价。) 实际上,我从未见过有副作用的条件,而且Googling也不会出现太多问题。下课后还有另一个学生问这个问题,所以我不是唯一认为这很奇怪的人。但是这位教授非常坚决地认为这是可以接受的代码,并且他会在工作中编写类似的代码。(他的FT工作是在您都听说过的一家公司担任首席SWE。) 我无法想象这样的代码行是可以接受的,更不用说是令人满意的了。我错了吗?这个可以吗?那么更一般的情况呢:有副作用的条件治疗呢?那些还好吗?

12
为什么没有更多的语言能够将一个值与另一个值进行比较?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 考虑以下: if(a == b or c) 在大多数语言中,这需要写成: if(a == b or a == c) 这有点麻烦并且会重复信息。 我知道我上面的示例语法有点笨拙,但是我确信有更好的方法来传达这个想法。 为什么没有更多的语言提供它?是否存在性能或语法问题?

3
我必须妥协:DRY还是Command-Query-Separation?
我最近正在重构既是命令又是查询方法的方法。 将其分为一个命令方法和一个查询方法后,我发现代码中现在有多个地方可以调用命令,然后从查询中获取值,这似乎违反了DRY原理。 但是,如果我要将通用代码包装到一个方法中,则该方法既是命令又是查询。这可以接受吗?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.