小编Igo*_*pov的帖子

请解释下面的Clojure代码

我找到了以下代码(在这篇博文中解决了Coin Changer Kata):

(defn change-for [amount]
  (let [denominations [25 10 5 1]
        amounts (reductions #(rem %1 %2) amount denominations)
        coins (map #(int (/ %1 %2)) amounts denominations)]
    (mapcat #(take %1 (repeat %2)) coins denominations)))
Run Code Online (Sandbox Code Playgroud)

我发现困难的部分是:(reductions #(rem %1 %2) amount denominations).

正如我发现的那样,简化只是根据某个给定的函数逐步计算得到的集合.示例:(reductions + [1 2 3])给出[1 3 6].

1         ; first  element
1 + 2     ; second element
1 + 2 + 3 ; third  element
Run Code Online (Sandbox Code Playgroud)

计算余数的下一个函数rem …

clojure

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

这种反模式的名称是什么?

当然有些人已经处理过这一个.当程序员被OO过度使用并忘记性能和拥有数据库时,往往会发生这种情况.

举个例子,假设我们有一个电子邮件表,他们需要通过这个程序发送.在启动时,它会查找需要发送的任何内容,如下所示:

Emails = find_every_damn_email_in_the_database();
FOR Email in Emails
  IF !Email.IsSent() THEN Email.Send()
Run Code Online (Sandbox Code Playgroud)

从一个不重复自己的角度来看这是一件好事,但有时这是不可避免的,它应该是:

Emails = find_unsent_emails();
FOR Email in Emails
  Email.Send()
Run Code Online (Sandbox Code Playgroud)

这个名字有吗?

performance terminology anti-patterns

5
推荐指数
2
解决办法
790
查看次数

在后面的代码中获取控件的样式{StaticResource {x:Type TextBlock}}

我想获取后面代码的默认值Style,TextBlock而无需TextBlock Style在资源中添加自定义默认值XAML.

我有一个像这样的方法:

public TextBlock DrawTextBlockAtPoint(string text, Style style)
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

我想提供一个只使用常规的覆盖TextBlock Style:

public TextBlock DrawTextBlockAtPoint(string text)
{
   var style = GetDefaultStyleForProperty(TextBlock.StyleProperty);
   DrawTextBlockAtPoint(text, style)
}
Run Code Online (Sandbox Code Playgroud)

反正有没有这样做?

wpf styles default code-behind

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

依赖注入仅适用于服务类型对象和单例吗?(而不是gui?)

我目前正在试验谷歌的控制容器的反转.我以前只为我的应用程序使用的任何服务(数据库,活动目录)提供了单例.现在我重构了代码:所有依赖项都作为构造函数的参数给出.到现在为止还挺好.现在最困难的部分是图形用户界面.我遇到了这个问题:我有一个包装在ProductFrame中的产品表(JTable).我将依赖项作为参数(EditProductDialog).

@Inject
public ProductFrame(EditProductDialog editProductDialog) {
  // ...
}

// ...

@Inject
public EditProductDialog(DBProductController productController, Product product) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

问题是guice无法知道我在表中选择了什么产品,因此无法知道EditProductDialog中要注入的内容.

依赖注入是非常病毒的(如果我修改一个类来使用依赖注入我也需要修改它与之交互的所有其他类)所以我的问题是我应该直接实例化EditProductDialog吗?但是我必须手动将DBProductController传递给EditProductDialog,我还需要将它传递给ProductFrame,所有这些归结为根本不使用依赖注入.

或者我的设计存在缺陷,因此我无法真正使该项目适应依赖性注射?

给我一些关于如何使用依赖注入和图形用户界面的示例.在因特网上找到的所有示例都是非常简单的示例,您可以使用一些具有依赖注入的服务(主要是数据库).

java user-interface dependency-injection inversion-of-control guice

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

如何根据需要安装和/或重新安装 msiexec

我在网络驱动器上放置了一个内部 MSI,我想编写一个登录脚本,以便我们网络上的任何人都可以将 MSI 安装到他们的计算机上,或者在 MSI 更新时自动重新安装它(这经常发生)。

如果我使用msiexec.exe /i REINSTALL=ALL它,如果 MSI 尚未安装在该机器上,它将不会执行任何操作。如果我省略REINSTALL=ALL,那么它将进行全新安装,但不会进行更新/重新安装。

如果尚未安装软件包,我应该选择哪些参数来使其执行全新安装,如果已经安装软件包,则应选择完全重新安装?

先运行msiexec /i然后重新安装可能会起作用,但如果可能的话我想避免这种情况。

编辑:需要的原因/famus是这些是开发人员机器,有人可能会手动更新注册表或注册一组不同的 dll。该脚本的目的是,即使 MSI 没有发生任何更改,开发人员也可以运行该脚本轻松恢复到“官方”环境。

windows-installer

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

将资源中的RTF文件加载到WPF应用程序中的RichTextBox

我正在尝试加载RTF文件的内容,我已将其放入资源(通过Project->Properties->Resources->Add File).

我想加载Agreement.rtf的内容RichTextBox,我尝试了以下内容:

Dim stream As Stream
stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(My.Resources.ResourceManager.GetObject("Agreement").GetType(), "IOpzioni.Agreement.rtf")
RichTextBox1.SelectAll()

RichTextBox1.Selection.Load(stream, DataFormats.Rtf)
Run Code Online (Sandbox Code Playgroud)

   stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(My.Resources.Agreement.GetType(), "IOpzioni.Agreement.rtf")
Run Code Online (Sandbox Code Playgroud)

IOpzioni 是我的默认命名空间(我已经仔细检查过).

似乎没什么用.这样做的正确方法是什么?

.net wpf resources rtf richtextbox

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

脚本块中的 Powershell 扩展变量

我正在尝试按照这篇文章扩展脚本块中的变量

我的代码尝试这样做:

$exe = "setup.exe"

invoke-command -ComputerName $j -Credential $credentials -ScriptBlock {cmd /c 'C:\share\[scriptblock]::Create($exe)'}
Run Code Online (Sandbox Code Playgroud)

如何修复错误:

The filename, directory name, or volume label syntax is incorrect.
    + CategoryInfo          : NotSpecified: (The filename, d...x is incorrect.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
    + PSComputerName        : remote_computer
Run Code Online (Sandbox Code Playgroud)

variables powershell scriptblock

5
推荐指数
2
解决办法
5788
查看次数

使用 Gradle 的 Kotlin 脚本配置获取属性的正确方法

我有一处房产gradle.properties

answer = 42
Run Code Online (Sandbox Code Playgroud)

用于build.gradle

println "answer is ${answer}"
Run Code Online (Sandbox Code Playgroud)

现在我想用 Kotlin 脚本替换 Groovy 以进行 Gradle 配置。如何以正确的方式访问属性?我现在在做的build.gradle.kts是:

fun property(name: String) = properties[name] as String

println("answer is " + property("answer"))
Run Code Online (Sandbox Code Playgroud)

这似乎不是很方便。谢谢!

groovy gradle kotlin

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

WPF 应用程序中使用哪些线程?

我希望了解各种类型应用程序中的线程使用情况,但令我有点惊讶的是, WPF 应用程序还有 2 个我没有预料到的线程(除了 UI 线程)。

我按照以下步骤操作:

  1. 创建新的 WPF 应用程序
  2. F5以在调试模式下启动它
  3. Debug -> Windows -> Parallel Stacks
  4. 按下Break All按钮
  5. 调查Parallel Stacks窗户

我原本希望得到一个线程 - UI 线程,但得到了 3 个线程:

WPF 默认线程

最左边的线程是 UI 线程 - 我一直期望它,但是其他 2 个线程是用来做什么的?我没有创建它们 - 我只是制作了一个准系统 WPF 应用程序 - 没有对新项目向导生成的初始代码进行任何修改。

另外,如何使用上面屏幕截图中红色箭头指示的功能:

  1. ProtocolHandler.SendThread
  2. ProtocolHandler.ReadThread

我查找了文档,但没有找到有关这些的太多信息。我也尝试在后面的代码中使用它们,但没有添加 using 语句 - 它们只是无法识别。

c# wpf multithreading threadpool

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

用于反转数字的功能算法

我最近一直在玩Clojure而且我无法使用这个算法:

(defn reverse-number [number reversed]
   (if (= number 0)
     reversed
     (reverse-number (/ number 10) 
                     (+ (rem number 10) (* reversed 10)))))
Run Code Online (Sandbox Code Playgroud)

这就是我应该如何调用它(reverse-number 123 0),我期望的结果是:321.当我运行它时,REPL就会挂起.

有人可以解释我,请问,发生了什么,我做错了什么以及如何让这个功能起作用?

注意:我知道我可以使用字符串函数来反转数字.实际上,我已经这样做了,但我对这个解决方案不感兴趣.我想要的只是实现功能语言的飞跃.这就是我尝试多种方法的原因.

使用字符串函数:

(defn reverse-number [n]
  (Integer. (clojure.string/reverse (str n))))

(reverse-number 123)  ; --> 321
Run Code Online (Sandbox Code Playgroud)

不喜欢这个版本,因为它感觉就像使用反向的字符串版本作弊.

functional-programming clojure

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