小编Twe*_*les的帖子

如何使用F#创建多级TreeView?

我想通过F#使用Gtk #widgets显示一个目录结构,但是我很难弄清楚如何将TreeViews转换为F#.假设我有一个如下所示的目录结构:

Directory1
  SubDirectory1
  SubDirectory2
    SubSubDirectory1
  SubDirectory3
Directory2
Run Code Online (Sandbox Code Playgroud)

如何使用F#使用Gtk #widgets显示此树结构?

编辑:

gradbot是我希望的答案,有几个例外.如果你使用ListStore,你就失去了扩展关卡的能力,如果你改为使用:

let musicListStore = new Gtk.TreeStore([|typeof<String>; typeof<String>|])
Run Code Online (Sandbox Code Playgroud)

你得到一个可扩展级别的布局.但是,执行此操作会中断对AppendValues的调用,因此您必须为编译器添加一些线索,以确定要使用的重载方法:

musicListStore.AppendValues (iter, [|"Fannypack" ; "Nu Nu (Yeah Yeah) (double j and haze radio edit)"|])
Run Code Online (Sandbox Code Playgroud)

请注意,列显式作为数组传递.

最后,您可以使用Append Values返回的ListIter进一步嵌套级别

let iter = musicListStore.AppendValues ("Dance")
let subiter = musicListStore.AppendValues (iter, [|"Fannypack" ; "Nu Nu (Yeah Yeah) (double j and haze radio edit)"|])
musicListStore.AppendValues (subiter, [|"Some Dude"; "Some Song"|]) |> ignore
Run Code Online (Sandbox Code Playgroud)

mono f# gtk# gtktreeview

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

使用指向派生类的指针初始化auto_ptr是否安全?

假设我有一个基类和一个派生类:

class Base
{
    public:
        virtual ~Base() {}
        virtual void DoSomething() = 0;
};


class Child : public Base
{
    public:
        virtual void DoSomething()
        {
            // Do Something
        }
};
Run Code Online (Sandbox Code Playgroud)

使用指向派生类实例的指针初始化基类类型的std :: auto_ptr是否安全?IE会像这样创建一个对象:

std::auto_ptr<Base> myObject(new Derived());
Run Code Online (Sandbox Code Playgroud)

正确调用派生类的析构函数而不是基类而不泄漏内存?

c++ smart-pointers auto-ptr

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

我应该将返回类型重命名为更通用的类型以便重用它吗?

所以我弄错了.

在最初为API编写签名时,我创建了以下内容:

public JellyBeanResult getJellyBeanReport();
Run Code Online (Sandbox Code Playgroud)

现在,事实证明我想重新使用更具体的JellyBeanResult对象,因为它的功能,但让其他函数返回一个为不同进程命名的类型会让人感到困惑.我可以想到有几种方法可以解决这个问题.我可以将返回类型重命名为更通用的类型:

public GenericResult getJellyBeanReport();
public GenericResult getChocolateBarReport();
Run Code Online (Sandbox Code Playgroud)

但这会破坏使用API​​的任何代码.我可以创建一个新的,更准确的命名类,它扩展了更接近新函数的SpecificResult:

public class ChocolateBarResult extends JellyBeanResult{};

public JellyBeanResult getJellyBeanReport();
public ChocolateBarResult getChocolateBarReport();
Run Code Online (Sandbox Code Playgroud)

但这真的非常难看,如果我想再次使用返回类型,问题仍然存在.如何在不破坏使用它们的代码的情况下清理这些签名以减少它们的混乱?

java oop refactoring

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

如何更改用于指示TabHost上已选中选项卡的颜色?

在android上TabHost layout,当用户选择一个标签时,标签的颜色会暂时改变.如何禁用此颜色更改,或指定选项卡更改为的颜色?

android android-tabhost

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

我如何借用Iterator?

我有一段我正在使用的代码,我在另一个Stack Overflow问题中找到

fn is_palindromic(num: i64) -> bool {
    let string = num.to_string();
    let bytes = string.as_bytes();
    let iter = bytes.iter();
    let n = bytes.len() / 2;
    equals(iter.take(n), iter.rev().take(n))
}
Run Code Online (Sandbox Code Playgroud)

当我最初找到它时这很好用,但是在2015年1月30日和2012年2月17日之间的Rust nightlies中发生了一些变化,导致弹出这个新错误:

src/program.rs:8:26: 8:30 error: use of moved value: `iter`
src/program.rs:8     equals(iter.take(n), iter.rev().take(n))
                                          ^~~~
src/program.rs:8:12: 8:16 note: `iter` moved here because it has type `core::slice::Iter<'_, u8>`, which is non-copyable
src/program.rs:8     equals(iter.take(n), iter.rev().take(n))
                            ^~~~
Run Code Online (Sandbox Code Playgroud)

我查看了文档,但我似乎无法找到任何可能表明可能发生变化的内容.看起来这个take方法现在的行为可能有所不同,但我不确定如何解决克隆bytes和使用两个单独的迭代器之间的情况.

这似乎是一种解决看似非常常见问题的非常低效的方法,所以我想我可能会遗漏一些东西.

借用迭代器以使用类似方法的正确方法是std::iter::order::equals什么?

rust

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