小编Dut*_*tch的帖子

什么时候可以在函数式语言中修改变量?

所以我正在使用Racket Scheme自学编程功能,到目前为止我都喜欢它.作为我自己的练习,我一直在尝试以纯粹的功能方式实现一些简单的任务.我知道不变性是功能风格的重要组成部分,但我想知道是否有任何时候它是可以的.

我想到了一种函数在与filter一起使用时从字符串列表中删除非唯一字符串的有趣方式,如下所示:

(define (make-uniquer)
  (let ([uniques '()])
    (lambda (x)
      (if (not (member x uniques))
          (set! uniques (cons x uniques))
          #f))))

(define (uniquify x)
  (let ([uniquer (make-uniquer)])
    (filter uniquer x)))
Run Code Online (Sandbox Code Playgroud)

如您所见,make-uniquer在一个字符串列表上返回一个闭包,以便与唯一性进行比较,这样它就可以作为过滤器的简单谓词.但我破坏性地更新了封闭式清单.这是不好的形式,还是以这种方式改变本地封闭变量?

lisp scheme functional-programming mutability purely-functional

10
推荐指数
2
解决办法
662
查看次数

我应该使用for循环结构还是forEach方法进行迭代?

一种方式更有效吗?一种方法与另一种方法有任何限制吗?感谢你们给我的任何意见;-)

javascript

4
推荐指数
1
解决办法
134
查看次数

Java中的静态构造函数方法

我不太确定该怎么称呼它,因为"静态构造函数"似乎传达了静态初始化程序块的概念,但我的问题与样式有关.

假设我有一个类武器,它有你的标准构造函数来初始化武器的统计数据.这很好,但有时候我想随机生成武器.我可以创建一个名为FromRandom的静态方法,它创建一个带有随机统计数据的新武器并返回它.这样我可以做这样的事情:

Weapon randWeapon = Weapon.FromRandom();
Run Code Online (Sandbox Code Playgroud)

对此有何共识?这是可接受的代码吗?

java

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

Win32 Common Controls初始化会破坏自定义控件吗?

所以我试图在Win32中初始化Common Controls和视觉样式.我构建了一个DLL,其中包含我编写的一些自定义控件,以及一个包含GUI应用程序的EXE.

通常情况下,责任分离似乎是我的DLL不应该担心我们是否启用窗口样式.它应该只生成自定义控件并将它们暴露给依赖的EXE.然后EXE可以决定它是否需要视觉样式,并且DLL不是更明智的.

问题是:我的DLL在进程附加中在DllMain中注册了它的窗口类.但是,如果我叫INITCOMMONCONTROLSEX的EXE,里面我的自定义控制按钮和诸如此类的东西显示不出来,因为自定义控件登记前的EXE可以初始化公共控件.

为了证明这一点,我在EXE调用InitCommonControlsEx 之后强制取消注册并重新注册我的自定义控件,并修复它:按钮显示在我的自定义控件上,带有视觉样式.

在理想的世界中,我希望能够在将来的程序中链接到我的共享库,并开始使用自定义控件,而无需担心修复常见控件和样式的问题.这可能吗?

c windows winapi

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