小编Naw*_*waz的帖子

如何在WinGHCi中查看当前的工作目录

我已经开始自学Haskell了,为此我已经安装了适用于Windows 的Haskell平台.我现在正在使用WinGHCi.我了解到它有:cd用于更改目录的命令.但问题是,我怎么知道我目前在哪个目录?我不知道为什么要更改目录.我搜索了很多但找不到答案.

请告诉我是否有办法知道当前的工作目录.我最好配置命令提示符本身来显示当前目录,就像Linux的控制台一样.


按照@Daniel的建议,我做了这些:

  • 由于我的工作在Windows 7上,没有.ghci文件(我认为这是类Unix操作系统),所以我创建了一个文件ghci.confC:\Users\Apelles\AppData\Roaming\ghc文件夹,因为它是在这里指示.
  • 复制粘贴了Daniel的答案中的脚本ghci.conf.
  • 然后我开始ghci.exe这是类似控制台的窗口.我注意到它加载了比之前通常用于加载的模块更多的模块.这是快照:

在此输入图像描述

你可以看到它加载了更多的模块,最后一行说,

无法解析提示字符串.使用Haskell语法.

这是什么意思?哪一行导致问题(来自以下脚本)?

let cur fill = do { cwd <- System.Directory.getCurrentDirectory; return (":set prompt \"" ++ cwd ++ fill ++ " \""); }
:def doprompt (\_ -> cur ">")
:def mycd (\dir -> System.Directory.setCurrentDirectory dir >> cur ">")
:doprompt
Run Code Online (Sandbox Code Playgroud)

此外,如果我将ghci.conf文件重命名为某个随机名称,然后启动ghci.exe,则会加载这些模块: 在此输入图像描述

正如我之前所说的,它加载的模块少的数量,这意味着与ghci.conf,ghci.exe做了成功,但在某些时候会失败.如何解决?

haskell working-directory ghci winghci

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

在C++中没有静态构造函数的基本原理是什么?

在C++中没有静态构造函数的基本原理是什么?

如果允许,我们将以非常有组织的方式在一个地方初始化其中的所有静态成员,如下所示:

//illegal C++
class sample
{
public:

    static int some_integer;
    static std::vector<std::string> strings;

    //illegal constructor!
    static sample()
    {
       some_integer = 100;
       strings.push_back("stack");
       strings.push_back("overflow");
    }
};
Run Code Online (Sandbox Code Playgroud)

在静态构造函数的缺失中,很难有静态向量,并用值填充它,如上所示.静态构造函数优雅地解决了这个问题.我们可以以非常有组织的方式初始化静态成员.

那么为什么'C++没有静态构造函数?毕竟,其他语言(例如,C#)具有静态构造函数!

c++ language-features constructor language-design static-constructor

29
推荐指数
4
解决办法
6479
查看次数

&(*similarObject)和similarObject之间的区别?他们不一样吗?

有人可以向我解释一下

dynamic_cast<SomeObject *>( &(*similarObject) );
Run Code Online (Sandbox Code Playgroud)

做取消引用指针的地址有什么意义?指针本身不是它的地址吗?

c++ casting dynamic

29
推荐指数
2
解决办法
827
查看次数

C++ - enum vs. const vs. #define

在这篇文章的最后:http://www.learncpp.com/cpp-tutorial/45-enumerated-types/,它提到了以下内容:

最后,与常量变量一样,枚举类型显示在调试器中,使得它们在这方面比#defined值更有用.

上面的大胆句子是如何实现的?

谢谢.

c++ macros enumeration constants

28
推荐指数
3
解决办法
2万
查看次数

函数声明中的最大参数数

我知道函数定义中的最小参数数量为零,但函数定义中的最大参数数量是多少?我只是为了知识和好奇而问这个问题,而不是我要写一个真正的功能.

c c++ limits function-parameter function-declaration

27
推荐指数
3
解决办法
3万
查看次数

这段代码是否定义明确?

此代码取自此处的讨论.

someInstance.Fun(++k).Gun(10).Sun(k).Tun();
Run Code Online (Sandbox Code Playgroud)

这段代码是否定义明确?是否++kkSun()之前评估过Fun ()?

如果k是用户定义的类型,而不是内置类型怎么办?以上函数调用顺序的方式与此不同:

eat(++k);drink(10);sleep(k);
Run Code Online (Sandbox Code Playgroud)

据我所知,在这两种情况下,每个函数调用后都存在一个序列点.如果是这样,为什么第一个案例也不能像第二个案例那样明确定义?

C++ ISO标准的1.9.17部分对序列点和功能评估进行了说明:

在调用函数时(无论函数是否为内联函数),在评估函数体中任何表达式或语句之前发生的所有函数参数(如果有) 之后,都会有 一个序列点.在复制返回值之后和执行函数外部的任何表达式之前,还有一个 序列点.

c++ operator-precedence sequence-points

27
推荐指数
4
解决办法
1758
查看次数

你什么时候喜欢使用std :: list <T>而不是std :: vector <T>?

我从来没有用过std::list<T>自己.当我们已经拥有它时,我想知道人们何时使用它std::vector<T>就像具有连续内存的数组一样.std::vector当我们需要顺序容器时,它似乎是一个完美的选择

所以我的问题是

  • 究竟什么时候喜欢 std::liststd::vector?为什么呢?
  • 你什么时候喜欢 std::vectorstd::list?为什么?

如果有性能考虑因素,请列出详细说明/信息.

如果可能,请引用一些参考资料,以支持您的答案.

c++ containers stl

27
推荐指数
4
解决办法
6073
查看次数

动态创建方法并执行它

背景:

我想static在C#中定义几个方法,并从运行时(在客户端)选择的这些方法之一生成IL代码作为字节数组,并通过网络将字节数组发送到另一台机器(服务器),之后应该执行它从字节数组重新生成IL代码.

我的尝试:(POC)

public static class Experiment
{
    public static int Multiply(int a, int b)
    {
        Console.WriteLine("Arguments ({0}, {1})", a, b);
        return a * b;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我得到方法体的IL代码,如:

BindingFlags flags = BindingFlags.Public | BindingFlags.Static;
MethodInfo meth = typeof(Experiment).GetMethod("Multiply", flags);
byte[] il = meth.GetMethodBody().GetILAsByteArray();
Run Code Online (Sandbox Code Playgroud)

到目前为止,我没有动态创建任何东西.但是我把IL代码作为字节数组,我想创建一个程序集,然后是一个模块,然后是一个类型,然后是一个方法 - 所有这些都是动态的.在创建动态创建方法的方法体时,我使用上面代码中使用反射得到的IL代码.

代码生成代码如下:

AppDomain domain = AppDomain.CurrentDomain;
AssemblyName aname = new AssemblyName("MyDLL");
AssemblyBuilder assemBuilder = domain.DefineDynamicAssembly(
                                               aname, 
                                               AssemblyBuilderAccess.Run);

ModuleBuilder modBuilder = assemBuilder.DefineDynamicModule("MainModule");

TypeBuilder tb = modBuilder.DefineType("MyType", 
                            TypeAttributes.Public | TypeAttributes.Class);

MethodBuilder mb …
Run Code Online (Sandbox Code Playgroud)

c# reflection il cil reflection.emit

27
推荐指数
3
解决办法
8536
查看次数

为什么Argument Dependent Lookup不能与函数模板dynamic_pointer_cast一起使用

考虑以下C++程序:

#include <memory>

struct A {};

struct B : A {};

int main()
{
    auto x = std::make_shared<A>();
    if (auto p = dynamic_pointer_cast<B>(x));
}
Run Code Online (Sandbox Code Playgroud)

使用MSVC 2010进行编译时,我收到以下错误:

error C2065: 'dynamic_pointer_cast' : undeclared identifier
Run Code Online (Sandbox Code Playgroud)

如果auto被替换,则错误仍然存​​在std::shared_ptr<A>.当我完全符合要求时std::dynamic_pointer_cast,程序会成功编译.

另外,gcc 4.5.1也不喜欢它:

error: 'dynamic_pointer_cast' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

我认为Koenig查找std::dynamic_pointer_cast会选择它,因为命名空间中的生命类型.我在这里错过了什么?xstd

c++ argument-dependent-lookup

26
推荐指数
2
解决办法
1931
查看次数

如果T不是默认可构造的,如何优雅地初始化std :: array <T,n>?

std::array<T, n> 如果T不是默认可构造的,我该如何初始化?

我知道可以像这样初始化它:

T t{args};
std::array<T, 5> a{t, t, t, t, t};
Run Code Online (Sandbox Code Playgroud)

n对我来说是模板参数:

template<typename T, int N>
void f(T value)
{
    std::array<T, N> items = ??? 
}
Run Code Online (Sandbox Code Playgroud)

即使它不是模板,如果n太大,手工重复值也很难看.

c++ arrays templates initialization c++11

24
推荐指数
2
解决办法
2525
查看次数