小编Pur*_*ari的帖子

为什么这不会导致无限循环的事件?

我有一个简单的应用程序,可以反转在另一个文本框中键入的任何文本.问题是,您可以修改任一文本框,更改将(字面上)反映在另一个文本框中.

我写了这段代码,相信它会引起问题.

private void realText_TextChanged(object sender, EventArgs e)
{
    mirrorText.Text = mirror(realText.Text);
}

private void mirrorText_TextChanged(object sender, EventArgs e)
{
    realText.Text = mirror(mirrorText.Text);
}

private string mirror(string text)
{
    return new string(text.Reverse().ToArray()).Replace("\n\r", "\r\n");
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试了它,相信它会导致无限循环(realText变化mirrorText,另一个事件发生,mirrorText变化realText等).但是,除了预期的行为之外什么也没发生

我当然对此感到高兴,我可以把它放在这里.或者我可以吗?

我很确定TextChanged每当Text发生变化时都会被触发.这是事件中某些错误保护的预期行为,还是我很幸运?这个代码在另一台计算机,其他构建设置等上是否会出错?它可以很容易地修复:

private void realText_TextChanged(object sender, EventArgs e)
{
    if (realText.Focused)
    {
        mirrorText.Text = Mirror(realText.Text);
    }
}
Run Code Online (Sandbox Code Playgroud)

我可能会这样做是为了安全,但需要检查一下吗?(我甚至不会问是否推荐它.)

.net c# events winforms textchanged

35
推荐指数
2
解决办法
3358
查看次数

启用后退按钮,不允许通过URL手动更改

我正在开发一个jQuery Mobile应用程序.jQuery Mobile pushState默认使用浏览器的后退按钮动态工作.

现在,我的应用程序旨在动态更改其页面,并且用户在加载应用程序时应始终到达首页.

问题是,只要我去应用程序中的页面,jQuery Mobile就会在URL中更新页面的哈希值.现在,如果用户在应用程序中输入相同的哈希值,jQuery Mobile将自动将它们带到该页面(当我希望它们由我的代码处理时).此外,如果他们刷新页面,我希望我的代码将它们带回原来的位置,而不是直接移动到URL所具有的哈希值.

为了防止这种情况,我尝试在mobileinit事件中添加以下代码:

$.mobile.hashListeningEnabled = false;
Run Code Online (Sandbox Code Playgroud)

这有效,但它也会禁用pushState更新,这反过来会破坏后退按钮,我不想发生这种情况.

什么是允许用户使用后退按钮的最佳方式,同时仍然不允许页面之间的手动移动?

javascript jquery jquery-mobile pushstate

9
推荐指数
1
解决办法
289
查看次数

将数据保存在静态变量中是不好的做法吗?

(之前可能会提出这个确切的问题.我无法通过搜索找到它.如果你发现它有重复的标记.)

在Android应用程序中,在这些情况下将对象存储在静态字段中是不是很糟糕?

  1. 应用数据.在应用程序运行时将应用程序数据保存在类中的静态变量中是不是很糟糕?目前我将数据存储在我的Application类中的实例变量中.然后需要数据的类可以从中获取数据Application.
  2. Context的等它是不好的做法,存储Context(例如,一个引用ActivityApplication静态字段)?这可以在需要例如a LayoutInflater或资源的类中使用.目前,我将Contexts 传递给需要它们作为参数的方法.

java static android

8
推荐指数
1
解决办法
3355
查看次数

在构造函数中使用对可覆盖方法的引用是否安全?

当我使用在构造函数中调用可覆盖方法的lambda添加事件侦听器时,我收到警告.如果我使用方法引用,我不会收到有关可覆盖方法或泄漏此方法的任何警告.我应该避免构造函数中的方法引用还是安全的?

这是一个简单的例子:

public class SomeClass {

    public SomeClass(SomeObj obj) {
        obj.addListener(this::handleEvent); // no warnings, is it really safe?
        obj.addListener((event) -> handleEvent(event)); // warning about overridable method in constructor
    }

    private void handleEvent(Event event) {
        event.doSomething(someMethod());
    }

    private void someMethod() {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

java lambda constructor java-8

8
推荐指数
2
解决办法
225
查看次数

看门狗在Python 3中获得三次事件

我正在使用Watchdog在Python中创建一个程序,该程序监视一组文件并根据更改采取操作.我把他们网站上的确切示例放在一个文件中:

import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    path = sys.argv[1] if len(sys.argv) > 1 else '.'
    event_handler = LoggingEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()
Run Code Online (Sandbox Code Playgroud)

然后,我注意到一些奇怪的事情 我以相同的方式为Python 2和Python 3安装了看门狗(使用pip2 install watchdogpip3 install watchdog).然而,当我运行在Python 2和3的程序,做同样的修改一次每个,出现这种情况:

$ python2 watch_test.py
2015-09-30 11:18:32 - Modified …
Run Code Online (Sandbox Code Playgroud)

python python-2.x python-3.x python-watchdog

8
推荐指数
0
解决办法
812
查看次数

使用flag或if子句更有效吗?

在Java循环中,使用boolean标志而不是if语句更有效吗?

看看这两行代码.

使用标志:

public boolean isSomethingForAnyone() {
    boolean flag = false;
    for (Item item : listOfItems) {
        flag = flag || item.isSomething();
    }
    return flag;
}
Run Code Online (Sandbox Code Playgroud)

使用if声明:

public boolean isSomethingForAnyone() {
    for (Item item : listOfItems) {
        if (item.isSomething())
            return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

if如果在第一次迭代时isSomething()返回true,则使用该语句的方法当然会更快.但是,它的平均速度是否更快,或者分支是否足够慢以至于速度较慢?另外,如果循环更快,情况会有所不同吗?为了简单起见,我在这里使用了for-each循环,我认为这比使用计数器迭代数组要慢.

java performance if-statement boolean

7
推荐指数
1
解决办法
198
查看次数

将常量称为函数名称?

(请在告诉我任何新方法之前先阅读整个问题.)

在PHP中,您可以通过在变量中调用其名称来调用函数.

function myfunc(){ echo 'works'; }

$func = 'myfunc';
$func(); // Prints "works"
Run Code Online (Sandbox Code Playgroud)

但是,你不能用常数做到这一点.

define('func', 'myfunc');

func(); // Error: function "func" not defined
Run Code Online (Sandbox Code Playgroud)

有一些解决方法,如下所示:

$f = func;
$f(); // Prints "works"

call_user_func(func); // Prints "works"

function call($f){ $f(); }
call(func); // Prints "works"
Run Code Online (Sandbox Code Playgroud)

PHP文档callable说:

PHP函数的名称作为字符串传递.除语言结构外,可以使用任何内置或用户定义的函数.

似乎没有关于常量值不可调用的内容.

我也尝试检查它,当然,

var_dump(is_callable(func));
Run Code Online (Sandbox Code Playgroud)

打印bool(true).

现在,有没有解释为什么会这样?据我所知,所有的变通方法都依赖于将常量值赋给变量,为什么不能连续调用?

再说一次,为了让它变得非常清晰,我不需要一种调用函数的方法,我甚至在那里提供了一些.我想知道为什么 PHP不允许直接通过常量调用函数.

php constants function

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

散列集,用于存储某些类JAVA的子类

考虑以下情况:

public abstract class Vegetable {};

public class Tomato extends Vegetable {};
public class Cucumber extends Vegetable {};

public class Orange {};
Run Code Online (Sandbox Code Playgroud)

关键是 - 我希望我HashSet只存储扩展的内容Vegetable,我该怎么做?这应该很简单..

但是Set <? extends Vegetable> () hs = new HashSet <? extends Vegetable> ();,当然,这不是一个有效的结构,Java要我指定Set我想要的类型- Tomato或者Cucumber,如果我只想要任何蔬菜,该怎么办?

我宁愿不使用任何演员......

java generics hashset

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

在ThreadPoolExecutor中设置allowCoreThreadTimeOut()是一个好习惯吗?

在我们的应用程序中,我们有很多ThreadPoolExecutors.当应用程序空闲时,ThreadPoolExecutors也是空闲的,但应用程序中的空闲线程数非常多.

在线程转储中,我发现大多数线程属于ThreadPoolExecutor等待任务的s.是否有任何副作用使这些工作线程保持活力?我应该使用setAllowCoreThreadTimeOut(),ThreadPoolExecutor以便工作线程在闲置一段时间后死亡吗?

java multithreading

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

eclipse appcompat-> res-> drawable-xxxhdpi错误

我刚刚更新了我的日食SDK 21.我知道eveytime我创建项目eclipse也会创建名为的项目appcompat_v7.但是appcompat_v7res/drawable-xxxhdpi文件夹中显示错误.它也使我的项目错误,并在控制台显示此警报

[2014-12-05 11:03:25 - Tast] invalid resource directory name: C:\Users\FahmiSDK\workspace\appcompat_v7\res/drawable-ldrtl-xxxhdpi
[2014-12-05 11:03:25 - Tast] invalid resource directory name: C:\Users\FahmiSDK\workspace\appcompat_v7\res/drawable-xxxhdpi
Run Code Online (Sandbox Code Playgroud)

请帮帮我,如何解决这个问题?

eclipse sdk android android-appcompat

5
推荐指数
0
解决办法
3306
查看次数