小编Rah*_*hul的帖子

如何在Haskell中建模mixins /多个接口?

在Haskell中遇到了关于建模继承的这个问题,它提醒我,我有一个更复杂的版本同样的问题.我将从那里采用这个例子,因为它比思考我自己更容易.

假设您的程序包含多种类型:

data Camera = Camera ...
data Light = SpotLight ... | DirectionalLight ...
data Object = Monster ... | Player ... | NPC ...
Run Code Online (Sandbox Code Playgroud)

现在你想要实现一些基本的物理,所以你希望它们都具有位置和速度,比如某种类型Vec3.

执行此操作的一种方法是Physical使用posvel函数声明类型类,并为其创建所有类型的实例.但这意味着你必须修改所有类型以包含两个Vec3s,如果你已经定义了很多很好的类型,那么这很烦人,而你只想在顶部粘合一些功能.Chris Taylor提出的基于镜头的解决方案也有同样的问题.

一个对我来说更整洁的解决方案是声明一个新类型的构造函数,

data Physical a = Physical a Vec3 Vec3
Run Code Online (Sandbox Code Playgroud)

然后你只需要执行pos,vel以及Functor实例一次,你得到所有现有的类型声明.

但是......这并不是很好.如果您现在希望能够将对象绘制为蓝色或绿色或紫色,则可能需要使用颜色执行相同操作:

data Coloured a = Coloured a Colour
Run Code Online (Sandbox Code Playgroud)

但是现在,如果你有一个Coloured Physical Camera,你必须fmap一个不同的次数取决于您是否想看看它的颜色和它的位置,或者它的焦距.和a Coloured Physical Camera应该是一样的Physical Coloured …

code-reuse haskell mixins

10
推荐指数
1
解决办法
655
查看次数

Matlab的边界函数使用什么算法?

您可能已经注意到,在较新版本的matlab中,边界函数(计算一组2d或3d点的边界)已得到改进.

现在可以给函数一个名为'shrink factor'的参数.如果收缩因子为0,则跟踪的边界是传统的凸包.当收缩参数更大时,边界更加收缩.如果未指定任何值,则缩小系数的默认值为0.5.

所以,我理解它的用途和它的作用(实际上我已经在项目中使用过该函数),但我不知道它是如何工作的.这种收缩系数的几何原理是什么?

谢谢!

matlab boundary

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

标签 统计

boundary ×1

code-reuse ×1

haskell ×1

matlab ×1

mixins ×1