我有一个简单的应用程序,可以反转在另一个文本框中键入的任何文本.问题是,您可以修改任一文本框,更改将(字面上)反映在另一个文本框中.
我写了这段代码,相信它会引起问题.
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)
我可能会这样做是为了安全,但需要检查一下吗?(我甚至不会问是否推荐它.)
我正在开发一个jQuery Mobile应用程序.jQuery Mobile pushState默认使用浏览器的后退按钮动态工作.
现在,我的应用程序旨在动态更改其页面,并且用户在加载应用程序时应始终到达首页.
问题是,只要我去应用程序中的页面,jQuery Mobile就会在URL中更新页面的哈希值.现在,如果用户在应用程序中输入相同的哈希值,jQuery Mobile将自动将它们带到该页面(当我希望它们由我的代码处理时).此外,如果他们刷新页面,我希望我的代码将它们带回原来的位置,而不是直接移动到URL所具有的哈希值.
为了防止这种情况,我尝试在mobileinit事件中添加以下代码:
$.mobile.hashListeningEnabled = false;
Run Code Online (Sandbox Code Playgroud)
这有效,但它也会禁用pushState更新,这反过来会破坏后退按钮,我不想发生这种情况.
什么是允许用户使用后退按钮的最佳方式,同时仍然不允许页面之间的手动移动?
(之前可能会提出这个确切的问题.我无法通过搜索找到它.如果你发现它有重复的标记.)
在Android应用程序中,在这些情况下将对象存储在静态字段中是不是很糟糕?
Application类中的实例变量中.然后需要数据的类可以从中获取数据Application.Context的等它是不好的做法,存储Context(例如,一个引用Activity或Application静态字段)?这可以在需要例如a LayoutInflater或资源的类中使用.目前,我将Contexts 传递给需要它们作为参数的方法.当我使用在构造函数中调用可覆盖方法的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) 我正在使用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 watchdog和pip3 install watchdog).然而,当我运行在Python 2和3的程序,做同样的修改一次每个,出现这种情况:
$ python2 watch_test.py
2015-09-30 11:18:32 - Modified …Run Code Online (Sandbox Code Playgroud) 在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循环,我认为这比使用计数器迭代数组要慢.
(请在告诉我任何新方法之前先阅读整个问题.)
在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不允许直接通过常量调用函数.
考虑以下情况:
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,如果我只想要任何蔬菜,该怎么办?
我宁愿不使用任何演员......
在我们的应用程序中,我们有很多ThreadPoolExecutors.当应用程序空闲时,ThreadPoolExecutors也是空闲的,但应用程序中的空闲线程数非常多.
在线程转储中,我发现大多数线程属于ThreadPoolExecutor等待任务的s.是否有任何副作用使这些工作线程保持活力?我应该使用setAllowCoreThreadTimeOut(),ThreadPoolExecutor以便工作线程在闲置一段时间后死亡吗?
我刚刚更新了我的日食SDK 21.我知道eveytime我创建项目eclipse也会创建名为的项目appcompat_v7.但是appcompat_v7在res/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)
请帮帮我,如何解决这个问题?
java ×5
android ×2
.net ×1
boolean ×1
c# ×1
constants ×1
constructor ×1
eclipse ×1
events ×1
function ×1
generics ×1
hashset ×1
if-statement ×1
java-8 ×1
javascript ×1
jquery ×1
lambda ×1
performance ×1
php ×1
pushstate ×1
python ×1
python-2.x ×1
python-3.x ×1
sdk ×1
static ×1
textchanged ×1
winforms ×1