小编ARR*_*RRG的帖子

多次调用相同方法时取消方法调用

我想这里可能有一个名字,但我不知道.所以我的第一个问题是要知道这种技术的名称.

这是一个例子:假设您正在网页上实施实时搜索.每次用户在搜索框中键入内容时,您都会触发新的搜索查询,并尽可能经常更新结果.这是一个愚蠢的事情,因为你会发送比实际需要更多的查询.每2-3个字母发送一次请求或每100毫秒发送一次请求可能就足够了.

因此,一种技术是在键入键后立即执行查询,如果仍有计划但未执行的查询,则取消它们,因为它们现在已经过时了.


现在更具体地说,是否有特定的模式或库来解决Java中的这个问题?

我必须在Swing应用程序中解决问题,并且我使用了ExecutorService,它返回了我可以取消的ScheduledFutures.问题是我必须手动为我想要"缓冲"的每个方法调用创建一个Runnable,并跟踪每个Future以取消它.

我确定我不是第一个实现这样的东西的人,所以某处必须有可重复使用的解决方案?可能是Spring中有注释和代理的东西?

java design-patterns debouncing

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

为什么我不能使用类型`Show a => [Something - > a]`?

我有记录类型说

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 -> …

haskell

4
推荐指数
2
解决办法
137
查看次数

是否可以对公共数据类型实施约束?

我有以下代码:

-- 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)

haskell

2
推荐指数
1
解决办法
104
查看次数

Int溢出强制为0?

如果我像这样写一个递归因子:

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)

haskell

1
推荐指数
2
解决办法
203
查看次数

标签 统计

haskell ×3

debouncing ×1

design-patterns ×1

java ×1