在Lua 5.1中,从不让协程正常结束有多糟糕?换句话说,如果一个协程收益但是我从来没有恢复它,它是否会在程序完成之前留下很多州?
cor=coroutine.wrap(somefunc)
while true do
done=cor()
if done then -- coroutine exited with "return true"
break
else -- coroutine yielded with "coroutine.yield(false)"
if some_condition then break end
end
end
function somefunc()
-- do something
coroutine.yield(false)
-- do some more
return true
end
Run Code Online (Sandbox Code Playgroud)
根据上面伪代码中的some_condition,协程可能永远不会被恢复,因此可能永远不会正确地"结束".
我可以这样做几十个协同程序而不必担心吗?将协同程序置于此状态是否安全?这个很贵吗?
引自:http: //msdn.microsoft.com/en-us/library/aa645739(VS.71).aspx
"调用事件只能在声明事件的类中完成."
我很困惑为什么会有这样的限制.如果没有这个限制,我将能够编写一个类(一个类),这个类一次用于管理发送给定类别的事件 - 比如INotifyPropertyChanged.
有了这个限制,我必须重新复制并粘贴相同(相同!)的代码.我知道C#的设计者不重视代码重用太多(*),但是gee ...复制和粘贴.这有多高效?
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
Run Code Online (Sandbox Code Playgroud)
在每个班级改变一些事物,到你生命的尽头.害怕!
所以,虽然我正在恢复我的额外发送课程(我太容易上当了),以旧的,"好"的复制和粘贴方式,你能看到吗?
如果你知道如何避免这种限制的任何技巧 - 也不要犹豫回答!
(*)具有多重继承我可以更好地编写通用发送方,但是C#没有多重继承
介绍界面
public interface INotifierPropertyChanged : INotifyPropertyChanged
{
void OnPropertyChanged(string property_name);
}
Run Code Online (Sandbox Code Playgroud)
为PropertyChangedEventHandler添加新的扩展方法Raise.然后为此新接口添加mediator类,而不是基本的INotifyPropertyChanged.
到目前为止,它是最小的代码,让我们代表它的所有者从嵌套对象发送消息(当所有者需要这样的逻辑时).
谢谢大家的帮助和想法.
Guffa写道:
"通过从外部触发事件,你无法做出任何事情,"
这很有意思,因为......我可以.这正是我要问的原因.看一看.
假设你有类字符串.不好意思吧?但是让我们用Invoker类打包它,它每次发生变化时都会发送事件.
现在:
class MyClass : INotifyPropertyChanged
{
public SuperString text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,当文本被更改时,MyClass被更改.因此,当我在文本内部时,我知道,如果我只拥有所有者,那么它也会被更改.所以我可以代表它发送活动.它在语义上是100%正确的.
备注:我的课程稍微聪明一点 - 所有者设置是否有这样的逻辑.
传递事件处理程序的想法 - …
问题陈述:给你一组k个字符串,每个长度为n.你必须一起输出一组字谜.Anagrams就像是atm - mat,like-kile.
我已经尝试了Google和StackOverflow推荐的所有内容(我能找到),包括使用Encode.我的代码工作,但它只使用UTF8,我得到广泛的字符警告.我知道如何解决这些警告,但我没有将UTF8用于其他任何事情,所以我只想转换它而不必调整我的其余代码来处理它.这是我的代码:
my $xml = XMLin($content);
# Populate the @titles array with each item title.
my @titles;
for my $item (@{$xml->{channel}->{item}}) {
my $title = Encode::decode_utf8($item->{title});
#my $title = $item->{title};
#utf8::downgrade($title, 1);
Encode::from_to($title, 'utf8', 'iso-8859-1');
push @titles, $title;
}
return @titles;
Run Code Online (Sandbox Code Playgroud)
注释掉你可以看到我尝试过的其他一些东西.我很清楚我不知道我在这做什么.我只是想用一个普通的旧ASCII字符串结束.任何想法将不胜感激.谢谢.
以前,要通过xstream 读取 UTF-8编码的XML,我使用DomDriver如下:
XStream xStream = new XStream(new DomDriver("UTF-8"));
Run Code Online (Sandbox Code Playgroud)
但是,后来我意识到这非常慢.我使用以下方式:
这至少可以正常工作.
但是,后来我意识到同样的技术不能应用于编写XML.我会得到所有??? 字符.
这是在写入期间使用DomDriver的最后一个可行代码
public static boolean toXML(Object object, File file) {
XStream xStream = new XStream(new DomDriver("UTF-8"));
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(file);
xStream.toXML(object, outputStream);
}
catch (Exception exp) {
log.error(null, exp);
return false;
}
finally {
if (false == close(outputStream)) {
return false;
}
outputStream = null;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常.为了与不使用DomDriver 的read方法匹配,我将代码更改为
public static boolean toXML(Object object, File …Run Code Online (Sandbox Code Playgroud) 考虑以下XML:
<response>
<status_code>200</status_code>
<status_txt>OK</status_txt>
<data>
<url>http://bit.ly/b47LVi</url>
<hash>b47LVi</hash>
<global_hash>9EJa3m</global_hash>
<long_url>http://www.tumblr.com/docs/en/api#api_write</long_url>
<new_hash>0</new_hash>
</data>
</response>
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种非常简短的方法来获得<hash>元素的价值.我试过了:
var hash = xml.Element("hash").Value;
Run Code Online (Sandbox Code Playgroud)
但那不起作用.是否可以提供XPath查询XElement?我可以使用旧System.Xml框架来执行此操作,执行以下操作:
xml.Node("/response/data/hash").Value
Run Code Online (Sandbox Code Playgroud)
在LINQ命名空间中是否有这样的东西?
更新:
在对此进行了一些讨论之后,我找到了一种方法来做我正在尝试做的事情:
var hash = xml.Descendants("hash").FirstOrDefault().Value;
Run Code Online (Sandbox Code Playgroud)
我仍然有兴趣看看是否有人有更好的解决方案?
rename('/images/old_name.jpg', '/images/new_name.jpg');
Run Code Online (Sandbox Code Playgroud)
此代码提供的文件未找到.
调用文件的脚本放在/source/文件夹中.
文件可以从中打开 http://site.com/images/old_name.jpg
如何从root获取这些文件?
这是我正在做的非常抽象的解释:
假设我有一个文本文件,其中包含由换行符分隔的数字.现在,我把这些数字放在一个map<int, int>,其中键是数字,值是频率.
我的最终目标是按频率排序的数字列表.我该怎么做呢?请注意,频率显然可以出现多次.我的想法是让一个struct包含数字和它的频率,并定义,<以便它永远不会返回相等.然后我会遍历地图,将所有元素放入该结构中,然后放入集合中.
我想在应用程序关闭或在后台运行一段时间(比如说5分钟)时,消除保存到NSUserDefaults所有字段中的所有变量.
我试图在applicationDidFinishLaunching的app委托中添加一行,如下所示:
if (UIApplicationStateBackground == TRUE) {
NSUserDefaults *profiles = [NSUserDefaults standardUserDefaults];
[profiles setObject:nil forKey:@"name1"];
[profiles synchronize];
}
Run Code Online (Sandbox Code Playgroud)
我还将这部分添加到applicationWillTerminate中:
NSUserDefaults *profiles = [NSUserDefaults standardUserDefaults];
[profiles setObject:nil forKey:@"name1"];
[profiles synchronize];
Run Code Online (Sandbox Code Playgroud)
这似乎都不起作用,我不知道如何设置'如果5分钟超过应用程序在后台,删除NSUserDefaults变量'的条件 - 任何帮助?