我想这里可能有一个名字,但我不知道.所以我的第一个问题是要知道这种技术的名称.
这是一个例子:假设您正在网页上实施实时搜索.每次用户在搜索框中键入内容时,您都会触发新的搜索查询,并尽可能经常更新结果.这是一个愚蠢的事情,因为你会发送比实际需要更多的查询.每2-3个字母发送一次请求或每100毫秒发送一次请求可能就足够了.
因此,一种技术是在键入键后立即执行查询,如果仍有计划但未执行的查询,则取消它们,因为它们现在已经过时了.
现在更具体地说,是否有特定的模式或库来解决Java中的这个问题?
我必须在Swing应用程序中解决问题,并且我使用了ExecutorService,它返回了我可以取消的ScheduledFutures.问题是我必须手动为我想要"缓冲"的每个方法调用创建一个Runnable,并跟踪每个Future以取消它.
我确定我不是第一个实现这样的东西的人,所以某处必须有可重复使用的解决方案?可能是Spring中有注释和代理的东西?
我有记录类型说
data Rec {
recNumber :: Int
, recName :: String
-- more fields of various types
}
Run Code Online (Sandbox Code Playgroud)
我想toString为Rec 编写一个函数:
recToString :: Rec -> String
recToString r = intercalate "\t" $ map ($ r) fields
where fields = [show . recNumber, show . recName]
Run Code Online (Sandbox Code Playgroud)
这有效.fields有类型[Rec -> String].但我很懒,我更喜欢写作
recToString r = intercalate "\t" $ map (\f -> show $ f r) fields
where fields = [recNumber, recName]
Run Code Online (Sandbox Code Playgroud)
但这不起作用.直觉我会说fields有类型Show a => [Rec -> …
我有以下代码:
-- A CharBox is a rectangular matrix of characters
data CharBox = CharBox [String]
deriving Show
-- Build a CharBox, ensuring the contents are rectangular
mkCharBox :: [String] -> CharBox
mkCharBox [] = CharBox []
mkCharBox xxs@(x:xs) = if (all (\s -> (length s) == length x) xs)
then CharBox xxs
else error "CharBox must be a rectangle."
Run Code Online (Sandbox Code Playgroud)
在[[Char]]必须为矩形(即所有子列表必须具有相同的长度)的许多功能模块的正常工作.在模块内部,我总是使用mkCharBox"构造函数",所以我不必一直强制执行此约束.
最初我希望我的模块声明看起来像这样:
module CharBox (
CharBox, -- No (CharBox) because it doesn't enforce rectangularity
mkCharBox
) where …Run Code Online (Sandbox Code Playgroud) 如果我像这样写一个递归因子:
fact 0 = 1
fact n = n * (fact (n-1))
Run Code Online (Sandbox Code Playgroud)
ghci告诉我它有类型(Eq p, Num p) => p -> p.
我希望Haskell能够变得聪明,并使这个阶乘实现变得更快.所以,如果我写:fact (10 :: Int)所有这些都是用Ints 快速数学,如果我写fact (1000 :: Integer),所有或部分计算将是慢速数学与Integers.
ghci在这里很有帮助:
?: :t fact (2 :: Int)
fact (2 :: Int) :: Int
?: :t fact (2 :: Integer)
fact (2 :: Integer) :: Integer
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
Q1:跑步时会发生什么
?: fact (10 :: Int)
>3628800
?: fact (40 :: Int)
>-7060926325325235253252...
?: fact (66 …Run Code Online (Sandbox Code Playgroud)