小编Car*_*ate的帖子

在这个琐碎的例子中安全地召唤新的最佳方式?

对于一个学校项目,我有3个班:一个鸡蛋,一个巢和一个母鸡.我们需要使用new创建每个in的实例,对每个实例进行main调用display(),然后显式删除每个实例.这一切都很简单.

我的问题是不知道如何正确地抓住一个bad_alloc; 应该抛出任何一个new电话.

现在,它看起来像这样:

int main(int argc, char* argv[]) {
    using namespace std;

    cout << "Creating new instances on the heap..." << endl;
    Egg* egg = new Egg("New Egg");
    Nest* nest = new Nest("New Nest");
    Hen* hen = new Hen("New Hen");

    cout << sizeof(*egg) << endl;
    cout << sizeof(*nest) << endl;
    cout << sizeof(*hen) << endl;


    cout << "\nCalling display() on each..." << endl;
    egg->display();
    nest->display();
    hen->display();

    cout << "\nExplicitly …
Run Code Online (Sandbox Code Playgroud)

c++ bad-alloc

6
推荐指数
1
解决办法
95
查看次数

生成随机数,不包括单个数字

我正在写一个Monty Hall模拟器,发现需要在一个范围内生成一个数字,不包括一个数字.

这似乎很容易,所以我天真地写道:

(这些g/...功能是我个人图书馆的一部分.它们的使用应该相当清楚):

(defn random-int-excluding
  "Generates a random number between min-n and max-n; excluding excluding-n.
  min-n is inclusive, while max-n is exclusive."
  [min-n max-n excluding-n rand-gen]
  (let [rand-n (g/random-int min-n max-n rand-gen)
        rand-n' (if (= rand-n excluding-n) (inc rand-n) rand-n)]
    (g/wrap rand-n' min-n (inc max-n))))
Run Code Online (Sandbox Code Playgroud)

这会在范围内生成一个随机数,如果它等于排除的数字,则加一; 必要时包装.当然,最终在被排除的数字之后给出数字两倍的被挑选机会,因为如果选择它或被排除的数字,它将被挑选.样本输出频率范围为0到10(最大不包括),不包括2:

([0 0.099882]
 [1 0.100355]
 [3 0.200025]
 [4 0.099912]
 [5 0.099672]
 [6 0.099976]
 [7 0.099539]
 [8 0.100222]
 [9 0.100417])
Run Code Online (Sandbox Code Playgroud)

然后我读了这个看起来更简单的答案,并在此基础上写道:

(defn random-int-excluding
  "Generates …
Run Code Online (Sandbox Code Playgroud)

random clojure

6
推荐指数
2
解决办法
485
查看次数

浮动和双重分数?

如果我在ghci中输入":i Double"或":i Float",则表示Double和Float是Fractional的实例.但是在Haskell文档中,它说它们不是.那么他们是不是? http://hackage.haskell.org/package/base-4.9.1.0/docs/Prelude.html#t:Fractional

haskell

6
推荐指数
1
解决办法
368
查看次数

获取原子的状态,并以原子方式重置它

我正在编写一个Mandelbrot Set实现,并且为了加快找出哪些点进入无穷大,我决定尝试使用ExecutorService并行检查点.

基本上该计划是:

  • 计算我需要找到的所有点
  • 给每个点服务
  • 让服务将其结果转储到生成Atom包装a vector
  • 让绘图代码定期获取生成的结果,并清除队列

我的问题是最后一点.我怎样才能安全地从原子中获取先前的结果重置它?

我想到了简单的方法:

(def draw-queue-A (atom []))

(defn grab-and-clear-queue []
  (let [results @draw-queue-A]
    (reset! draw-queue-A [])
    results)) 
Run Code Online (Sandbox Code Playgroud)

但这看起来不安全.如果在取消引用和之间添加了某些内容reset!,它将会丢失.

我此刻已经解决的残暴憎恶是:

(defn grab-and-clear-queue []
  (let [results (atom [])]
    (swap! draw-queue-A
           (fn [res] (reset! results res)
                     []))
    results))
Run Code Online (Sandbox Code Playgroud)

但是使用原子来检索结果似乎很荒谬.

我怎样才能理智地检索原子的内容,重置它而不会丢失任何结果?

atomic clojure

6
推荐指数
2
解决办法
407
查看次数

为什么在表单上调用 submit 并单击提交按钮会产生不同的 GET 参数?

我正在尝试一个简单的 CSRF 攻击并遇到了一个问题。

如果我有一个包含此表单的虚拟站点:

<form action="somewebsitetoexploit.com/someformpage" method="GET" hidden>
    <input type="password" autocomplete="off" name="password_new" value="hacked"><br>
    <input type="password" autocomplete="off" name="password_conf" value="hacked">
    <input type="submit" value="Change" name="Change">
</form>
Run Code Online (Sandbox Code Playgroud)

我最初的想法是通过submit在页面加载时在表单上调用脚本标记来让这个表单“自我提交”,以便在用户访问页面时自动更改用户密码:

<script>
    window.onload = (_) => {
        const form = document.getElementsByTagName("form")[0];
        form.submit();
    };
</script>
Run Code Online (Sandbox Code Playgroud)

这看起来有效,但密码未能更改。在查看 GET 参数时,我意识到这是因为它没有包含Change参数(提交按钮本身)。它产生了:

?password_new=hacked&password_conf=hacked
Run Code Online (Sandbox Code Playgroud)

代替:

?password_new=hacked&password_conf=hacked&Change=Change
Run Code Online (Sandbox Code Playgroud)

我猜这会导致它在后端的验证检查失败。

它看起来很笨拙,但我能够通过将其设置click为提交按钮而不是submit直接输入表单来修复它:

<script>
    window.onload = (_) => {
        const submit = document.getElementsByName("Change")[0];
        submit.click();
    };
</script>
Run Code Online (Sandbox Code Playgroud)

我查看了相关的MDN 页面,它指出调用submit与单击提交按钮有两个不同之处:

  • submit引发任何事件。特别是,表单的onsubmit事件处理程序不会运行。
  • 不触发约束验证。

目前还不清楚为什么onsubmit …

javascript forms

6
推荐指数
2
解决办法
53
查看次数

将多个选择器与伪类相关联

有没有办法让几个选择器与伪类相关联?

换句话说,我想这样做,如果锚,图像或按钮悬停或聚焦,它们周围会有一个特殊的边框.

我试过这个(在黑暗中拍摄):

(a,button,img):hover, (a,button,img):focus {
    border: 2px dashed black;
}
Run Code Online (Sandbox Code Playgroud)

但是Webstorm并不喜欢它,也没有激活它.

我知道这有效:

a:hover, a:focus {
    border: 2px dashed black;
}
Run Code Online (Sandbox Code Playgroud)

但我希望能够将其应用于其他选择器,而无需多次重复自己将其应用于所有选择器.

css css-selectors css3

5
推荐指数
1
解决办法
251
查看次数

防止输入文本框中出现退格键

我正在制作一个测试打字速度的 Web 应用程序。

它为用户提供了一些要输入的文本以及一个要输入的输入框。如果用户输入了错误的键,我将使用preventDefault生成的键事件来防止在输入框中输入错误的字符(而是向用户显示错误消息)。

问题是,并preventDefault不能阻止输入退格键。理想情况下,由于错误的按键永远不会输入到文本框中,因此允许退格是没有意义的。如果用户习惯性地在发现错误时按退格键,则会导致输入框中的文本变得不正确。这不会影响测试结果,只是不是理想的情况。

如何防止“文本”类型的 HTML5 输入元素中出现退格?

html javascript input-field dom-events

5
推荐指数
1
解决办法
6595
查看次数

随机int函数

有人可以解释为什么(int) (Math.random()*12-3)返回介于-2和8 (int) (Math.random()*12)-3之间的值,而返回介于-3和8之间?

不同之处在于括号的位置,但我不知道为什么它会产生影响的"引擎盖下".如果Math.random()可以返回的最低值为0,那么0*12 = 0并且两者最终都应该以-3结尾.我认为它与铸造到int和0.x到1有关.它只是(理论上)不可能达到0.00000000 ......?

java

5
推荐指数
1
解决办法
93
查看次数

为什么ASeq需要一个集合来实现Sequential以允许等价?

我正在写自己的range实现ISeq.我最初的实现equiv只是调用seq我的范围和另一个列表,并使用=以下方法进行比较:

(defn equals? [this-range other-range]
  (= (seq this-range) (seq other-range)))
Run Code Online (Sandbox Code Playgroud)

这似乎很好,但后来我遇到了一些奇怪的行为:

(= (new-range 5 10)
   (range 5 10))
=> true

(= (range 5 10)
   (new-range 5 10))
=> false ; Uh oh
Run Code Online (Sandbox Code Playgroud)

new-range我的自定义构造函数在哪里.

为了了解LongRange句柄的等效性,我检查了它的来源.它代表们ASeq,和ASeqequiv方法开始与线:

public boolean equiv(Object obj) {
    if (!(obj instanceof Sequential) && !(obj instanceof List)) {
        return false;
. . .
Run Code Online (Sandbox Code Playgroud)

由于我的范围没有实现,Sequential或者List此检查失败.它甚至没有尝试迭代我的范围来进行值比较.

这是什么原因?Sequential只是一个空的界面.似乎只是存在将类"标记"为顺序而不需要任何方法. …

clojure

5
推荐指数
1
解决办法
63
查看次数

随机窃取对子初始化程序的调用

有一种涉及子分类的情况我无法弄清楚。

我正在进行子分类Random(原因超出了重点)。这是我所拥有的一个基本示例:

import random

class MyRandom(random.Random):
    def __init__(self, x):  # x isn't used here, but it's necessary to show the problem.
        print("Before")
        super().__init__()  # Nothing passed to parent
        print("After")

MyRandom([])
Run Code Online (Sandbox Code Playgroud)

上面的代码在运行时给出以下错误(并且不打印“Before”):

>>> import test
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\_\PycharmProjects\first\test.py", line 11, in <module>
    MyRandom([])
TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)

对我来说,这没有任何意义。不知何故,即使我没有传递它,参数MyRandom显然也被直接传递给Random.__init__,并且该列表被视为种子。"Before"从不打印,所以显然我的初始化器甚至从未被调用。

我认为这可能是由于Random在 C 中实现的父级造成的,这导致了奇怪的情况,但是list子类化的类似情况不会产生错误,指出整数不可迭代:

class MyList(list):
    def __init__(self, y):
        print("Before")
        super().__init__() 
        print("After") …
Run Code Online (Sandbox Code Playgroud)

python subclass

5
推荐指数
1
解决办法
127
查看次数