小编MMa*_*ail的帖子

如何在保持清洁编程实践的同时设计通用操作类?

手头的任务是创建我的Java Web应用程序的一部分,这将允许我以组合方式轻松执行小块代码.手头的任务是允许用户以任何顺序撰写"动作".我正在努力的是将参数传递给我的行动.

一切都从动作界面开始:

public interface Action {
    void resolve(Context context);
}
Run Code Online (Sandbox Code Playgroud)

解决操作后,将执行代码.代码可以是任何东西:在Java中调用方法,执行一些Javascript ...

在这里,"背景"对我来说是个问题.每个动作都在特定的上下文中执行.我们的想法是创建操作的用户可以指定从概念中检索哪个对象,例如正在解析当前操作的用户,或者在操作的特定界面中指定的其他对象.

例如,让我们来看看这个动作:

public final class ActionScript implements Action {
    private final Parameters parameters;
    private final String methodName;
    private final ScriptsLibrary library;

    public ActionScript(ScriptsLibrary library, String methodName, Parameters parameters) {
        this.parameters = parameters;
        this.library = library;
        this.methodName = methodName;    
    }

    @Override
    public void resolve(Context context) {
        try { 
            ((Invocable) library.getEngine()).invokeFunction(methodName, context);
        } catch (ScriptException | NoSuchMethodException ex) {
            throw new RuntimeException(ex);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它是一个简单的包装器,使用Nashorn在Javascript中调用一个动作.参数可以是任何东西:DB中具有特定ID的对象,用户配置的int/String/boolean值...

操作中的代码可能如下所示:

public class …
Run Code Online (Sandbox Code Playgroud)

java oop

8
推荐指数
1
解决办法
768
查看次数

Haskell中非空叶子树的应用实例

给定以下数据类型:

data Tree a =
    Branch (Tree a) (Tree a)
  | Leaf a deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)

以下的Functor实例:

instance Functor Tree where
  fmap f (Leaf a)       = Leaf $ f a
  fmap f (Branch t1 t2) = Branch (fmap f t1) (fmap f t2)
Run Code Online (Sandbox Code Playgroud)

如何最好地实现这棵树的Applicative实例?我提出了:

instance Applicative Tree where
  pure = Leaf

  Leaf f       <*> t            = f <$> t
  Branch t1 t2 <*> Leaf a       = t1 <*> Leaf a
  Branch t1 t2 <*> Branch t3 t4 = Branch (t1 …
Run Code Online (Sandbox Code Playgroud)

binary-tree haskell applicative

3
推荐指数
1
解决办法
330
查看次数

在Clojure中,apply和into将lazy seqs转换为其他类型有什么区别?

在clojure中,我经常使用以下代码:

(into [] (range 3))
Run Code Online (Sandbox Code Playgroud)

但后来我看到这个代码被使用:

(apply vector (range 3))
Run Code Online (Sandbox Code Playgroud)

这两个代码示例之间有什么区别?比另一个更习惯吗?何时使用to init集合,以及何时使用apply + factory函数?

clojure

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

如何获取具有 Bounded 实例的类型的 maxBound

以下 Haskell 代码无法编译:

\n\n
getMaxBound :: (Bounded a) => a -> a\ngetMaxBound _ = maxBound :: a\n
Run Code Online (Sandbox Code Playgroud)\n\n

我得到的错误如下:

\n\n
Could not deduce (Bounded a1) arising from a use of \xe2\x80\x98maxBound\xe2\x80\x99\n  from the context: Bounded a\n    bound by the type signature for:\n               getMaxBound :: Bounded a => a -> a\n    at rot13.hs:3:1-36\n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么我无法在 Haskell 中获取有界类型的 maxBound?

\n\n

理想情况下,我会像这样使用这个函数:

\n\n
getMaxBound 3\n> 9223372036854775807\n\ngetMaxBound 'c'\n> '\\1114111'\n
Run Code Online (Sandbox Code Playgroud)\n\n

我觉得每次我有任何a具有 Bounded 实例的类型时,我应该能够获得该类型的 maxBound。

\n\n

我缺少什么?

\n

haskell bounded-types

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

标签 统计

haskell ×2

applicative ×1

binary-tree ×1

bounded-types ×1

clojure ×1

java ×1

oop ×1