分发Clojure应用程序的"最少工作"方法是什么?这与"最佳"方法不同吗?
例如,这是一个简单的"应用程序",我希望能够发送给某人:
(doto (javax.swing.JFrame. "Hello World")
(.add (javax.swing.JLabel. "Clojure Distributable"))
(.pack)
(.show))
Run Code Online (Sandbox Code Playgroud)
我想,无论是否已经安装了Java,它的答案都会有很大的不同.
类型提示可以在多次反射发生的执行时间上有很大的改进.我对类型提示的理解是它只允许编译器缓存反射查找.缓存可以动态发生吗?或者有什么理由这是不好/不可能的?
我可以使用WinForms控件,但不能使用整个表单:
var foo = new DockableContent();
foo.Title = "Foo";
foo.Name = "FooName";
var c = new WindowsAppFramework.RenderTargetUserControl();
c.Dock = System.Windows.Forms.DockStyle.Fill;
c.AutomaticUpdateFPS = 60;
var host = new System.Windows.Forms.Integration.WindowsFormsHost();
host.Child = c;
foo.Content = host;
foo.ShowAsDocument(dockManager);
foo.Focus();
Run Code Online (Sandbox Code Playgroud)
是否可以使用整个表格?我想在应用程序中使用现有的表单.
我正在使用Microsoft.FSharp.Core.Collections.FSharpMap,并且经常要编写:
var oo = world.Entity.TryFind(t);
var entity = oo == null ? null : oo.Value;
Run Code Online (Sandbox Code Playgroud)
和类似的.有什么建议更好的风格?
我试图通过在它自己的进程中启动的 MAF 插件中执行它来沙箱潜在的恶意代码:
var x = token.Activate<Ix>(new AddInProcess(), AddInSecurityLevel.Internet);
Run Code Online (Sandbox Code Playgroud)
这似乎运行良好,除了在处理 StackOverflowException 时会显示一个对话框:“AddInProcess.exe 已停止工作”。这使得测试变得非常困难
[TestMethod]
public void TestStackOverflow() {
var host = new Host(Environment.CurrentDirectory
+ "/../../../build/pipeline");
host.Run("foo");
host.Tick();
Thread.Sleep(1000);
host.Monitors.Count.Should().Be(0);
host.Shutdown();
}
Run Code Online (Sandbox Code Playgroud)
如果我在 Sleep 到期之前单击“关闭”按钮,则测试成功,否则失败。这表示在按下“关闭”按钮之前该过程不会退出。鉴于我希望进程终止,我如何确保它这样做而不引发此对话框?我尝试将我的操作系统设置为“从不检查解决方案”,但对话框仍然出现。将其设置为“自动检查解决方案”可避免出现对话框,但最多需要 10 秒,这是不可取的……我宁愿避免操作系统设置。

GDB似乎总是适用于C程序,但对于C++,我经常得到这些神秘的堆栈:
(gdb) bt
#0 0x08055fa4 in std::runtime_error::what ()
#1 0x080576c8 in std::runtime_error::what ()
#2 0x08057dda in std::runtime_error::what ()
#3 0x080580d2 in std::runtime_error::what ()
#4 0x08058662 in std::runtime_error::what ()
#5 0x08058725 in std::runtime_error::what ()
#6 0x0806ef7a in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<char*> ()
#7 0x00c0adec in __libc_start_main () from /lib/libc.so.6
#8 0x0804d011 in std::runtime_error::what ()
Run Code Online (Sandbox Code Playgroud)
从表面上看,它没有提供关于问题发生位置的线索.反正有没有从这样的核心文件中获取更多信息 - 或者让程序转储更有用的东西?
我是Clojure的新手.我有一张地图矢量:
(def vecmap [{:a "hello"} {:a "hi"} {:a "hey"}])
Run Code Online (Sandbox Code Playgroud)
基本上我想检查地图矢量中是否存在给定值.我用过这个:
(doseq [r vecmap] (get-in r [:a]))
Run Code Online (Sandbox Code Playgroud)
这将获得关键的所有价值:a.但后来我想将所有这些值放在一个向量中,以便我可以使用contains检查向量中是否存在给定值?我怎么能在Clojure中做到这一点?
clojure ×3
c# ×2
.net ×1
avalondock ×1
c++ ×1
coding-style ×1
dictionary ×1
exception ×1
f# ×1
gdb ×1
java ×1
maf ×1
vector ×1
winforms ×1
wpf ×1