我认为RxJS应该完全适合压制多次按键点击2秒.但是,我正在努力实施.
var $button = $('#myButton').button();
$button
.toObservable("click")
//.Throttle(2000) // Wouldn't fire the first event instantly :-(
.Subscribe(function(){ alert('clicked'); });
Run Code Online (Sandbox Code Playgroud)
为方便起见,我已经创建了一个jsFiddle.你需要向下滚动这个小提琴,因为我只是粘贴Rx,因为我找不到CDN.
我正在努力深入了解Monads.因此,我开始挖掘一下Maybe Monad.
有一件事我似乎没有做对.读这个:
"因此,Maybe Bind会发生短路.在任何一系列操作中,如果其中任何一个返回Nothing,评估将停止,并且整个链条都不会返回任何内容."
来自:http://mikehadlow.blogspot.com/2011/01/monads-in-c-5-maybe.html
还有这个:
"对于Maybe<T>类型,绑定是根据一个简单的规则实现的:如果链在某个点返回一个空值,则链中的其他步骤将被忽略,而空值则是returend"
来自:"C#中的功能编程" http://www.amazon.com/Functional-Programming-Techniques-Projects-Programmer/dp/0470744588/
好吧,让我们来看看代码.这是我的可能Monad:
public class Maybe<T>
{
public static readonly Maybe<T> Empty = new Maybe<T>();
public Maybe(T value)
{
Value = value;
}
private Maybe()
{
}
public bool HasValue()
{
return !EqualityComparer<T>.Default.Equals(Value, default(T));
}
public T Value { get; private set; }
public Maybe<R> Bind<R>(Func<T, Maybe<R>> apply)
{
return HasValue() ? apply(Value) : Maybe<R>.Empty;
}
}
public static class MaybeExtensions
{
public static Maybe<T> ToMaybe<T>(this T …Run Code Online (Sandbox Code Playgroud) 我试图在一个应该持有的结构上放置一个字段Option<closure>.
然而,Rust正在向我大吼大叫,我必须指明它的生命周期(并不是说我真的会这么说).我正尽力做到这一点,但Rust对我提出的建议并不满意.看看我对我得到的编译错误的内联注释.
struct Floor{
handler: Option<|| ->&str> //this gives: missing lifetime specifier
//handler: Option<||: 'a> // this gives: use of undeclared lifetime name `'a`
}
impl Floor {
// I guess I need to specify life time here as well
// but I can't figure out for the life of me what's the correct syntax
fn get(&mut self, handler: || -> &str){
self.handler = Some(handler);
}
}
Run Code Online (Sandbox Code Playgroud) 我开始使用Sencha Touch 2,我只是想知道它是如何处理资源清理的.
特别是:
想象一下,我们有一堆由url重定向触发的控制器.这些Controller实例是否会被缓存,或者Sencha是否每次需要在控制器上调用方法时都会创建新实例
视图相同.sencha是否缓存视图,或者每次需要再次渲染时都会重新创建它们.什么时候视图被破坏(如果是)?
我可以控制sencha如何处理这些事情吗?
所有的例子,我发现创建一个lib.rs,然后将该文件中创建mod foo;,mod bar;为每个文件foo.rs,bar.rs等等.
基本上我想要的是将我的箱子分成多个文件,但不必为每个文件引入大量模块.Rust不可能做到这一点吗?
我知道IEnumerable已在这里多次讨论,但我找不到我的具体问题的答案,所以我把它作为一个新问题提出来.
考虑以下代码:
static void Main(string[] args)
{
List<string> testList = new List<string> {"Test", "Test1", "Test1"};
IEnumerable<string> filtered = testList.Where(x => x == "Test1");
DoSomeWork(filtered);
DoSomeMoreWork(filtered);
}
public static void DoSomeWork(IEnumerable<string> items)
{
foreach (var item in items)
{
Console.WriteLine("do some work");
}
}
public static void DoSomeMoreWork(IEnumerable<string> items)
{
foreach (var item in items)
{
Console.WriteLine("do some more work");
}
}
Run Code Online (Sandbox Code Playgroud)
我是对的,这不仅导致"过滤"中的两个项目迭代两次,而且实际上是"testList"中的项目?因此,考虑到"testList"是一个包含10000个项目的大列表,"过滤"将其减少到10个项目,将"过滤"列表更加聪明(也就是使用var并在最后添加ToList())
编辑: 这是我在这里问过的最令人尴尬的问题.我知道迭代IQueryable是不好的,因为这会导致从DB中获取两次数据.但是我在内存列表中并不完全确定.如果可以,我会删除这个问题;-)
我在网上找到很多Sencha Touch的例子,并没有真正专注于正确的视图封装.因此,即使按钮深度嵌套在视图中,Controller也会监听每个按钮的事件.换句话说,视图泄漏的内部从来都不是一件好事.
我找到了一个很好的教程,鼓励你创建有意义的观点,听取当地的事件,并提出有意义的商业活动等.
http://miamicoder.com/2012/how-to-create-a-sencha-touch-2-app-part-2/
但是,到目前为止我无法弄清楚的一件事是如何最好地缓存嵌套组件实例.考虑这个例子:
Ext.define("NotesApp.view.NotesListContainer", {
extend: "Ext.Container",
alias: "widget.noteslistcontainer",
initialize: function () {
this.callParent(arguments);
var newButton = {
xtype: "button",
text: 'New',
ui: 'action',
handler: this.onNewButtonTap,
scope: this
};
var topToolbar = {
xtype: "toolbar",
title: 'My Notes',
docked: "top",
items: [
{ xtype: 'spacer' },
newButton
]
};
this.add([topToolbar]);
},
onNewButtonTap: function () {
console.log("newNoteCommand");
this.fireEvent("newNoteCommand", this);
},
config: {
layout: {
type: 'fit'
}
}
});
Run Code Online (Sandbox Code Playgroud)
比方说,我们要添加一个方法setSpecialUIState给我们的NotesListContainer.当它被调用时,我们想要做一些事情newButton(例如隐藏它).如何在newButton不滥用的情况下获取对实例的访问权限Ext.getComp() …
由于views与被定义JSON在CouchDB我具有限定那些以人可读方式很难.
拿这个文件:
{
"language": "javascript",
"views": {
"by_location": {
"map": "function(doc) { if (doc.location != null) emit(doc.location, doc) }"
},
"by_location_tags": {
"map": "function(doc) { if (doc.top_tags) { for(i=0;i<doc.top_tags.length;i++) { emit([doc.top_tags[i].tag_name, doc.location], doc); } } }"
}
}
}
Run Code Online (Sandbox Code Playgroud)
将地图函数编写为一个长字符串非常难看,并且发现错误非常困难.我想知道定义视图的工作流程是什么CouchDB?我觉得我错过了显而易见的事实.
我看到很多Rust代码,其中的use语句如下所示:
use std::io::net::ip::{SocketAddr, Ipv4Addr};
Run Code Online (Sandbox Code Playgroud)
我得到它的方式,这限制use语句只导入SocketAddr和Ipv4Addr.
从Java或C#等语言的角度来看,这种语言很奇怪,因为import语句总是导入所有公共类型.
我想在Rust中使用此语句可以使用相同的内容.
use std::io::net::ip::*;
Run Code Online (Sandbox Code Playgroud)
我可以看到显式命名的唯一原因是避免两个不同的导入包含具有相同名称的公共API的冲突.但是,这可以通过别名来解决,所以我想知道更严格的"仅导入需要的"方法是否还有另一个优点?
我可能没有看到森林的树木,但我想知道我如何设计我的方法,以对抗硬集合类型,而不是反对迭代器.考虑这种方法.
pub fn print_strings(strings: Vec<String>) {
for val in strings.iter() {
println!("{}", val);
}
}
Run Code Online (Sandbox Code Playgroud)
显然,如果我想用一个HashSet或那个来使用它,这就不足了HashMap.
所以,我试过这个:
use std::collections::*;
fn main () {
let strings = vec!("Foo", "Bar");
let mut more_strings = HashMap::new();
more_strings.insert("foo", "bar");
more_strings.insert("bar", "foo");
print_strings(&strings.iter());
print_strings(&more_strings.values())
}
fn print_strings(strings: &Iterator<Item=&str>) {
for val in strings {
println!("{}", val);
}
}
Run Code Online (Sandbox Code Playgroud)
游戏围栏(也用于查看冗长的编译器错误)
不幸的是,这似乎也没有做到这一点.我错过了什么?
rust ×4
sencha-touch ×2
c# ×1
collections ×1
couchdb ×1
extjs4 ×1
ienumerable ×1
iterator ×1
javascript ×1
json ×1
lifetime ×1
linq ×1
maybe ×1
module ×1
monads ×1
namespaces ×1
rust-crates ×1
rxjs ×1
syntax ×1
throttling ×1
traits ×1
view ×1