小编Fra*_*eld的帖子

如何在函数中绑定第二个参数而不是第一个参数(以优雅的方式)?

在没有使用lambda函数或定义另一个"本地"函数的情况下,Haskell中是否有一种方法可以绑定第二个参数而不是第一个函数?

例.我有一个像二进制函数:

sub :: Int -> Int -> Int
sub x y = x - y 
Run Code Online (Sandbox Code Playgroud)

现在,如果我想绑定第一个参数,我可以轻松地使用(sub someExpression):

mapSubFrom5 x = map (sub 5) x

*Main> mapSubFrom5 [1,2,3,4,5]
[4,3,2,1,0]
Run Code Online (Sandbox Code Playgroud)

如果我想绑定前n个参数而没有"gap",那就行得很好.

如果我想绑定第二个参数而不是第一个参数,我知道的两个选项更详细:

通过另一个本地功能:

mapSub5 x = map sub5 x
    where sub5 x = sub x 5

*Main> mapSub5 [1,2,3,4,5]
[-4,-3,-2,-1,0]
Run Code Online (Sandbox Code Playgroud)

或者使用lambda:

mapSub5 x = map (\x -> sub x 5) x
Run Code Online (Sandbox Code Playgroud)

虽然两者都工作正常,但我喜欢"sub 5"的优雅,并想知道是否有一种类似的优雅方式来绑定函数的第n(n> 1)个参数?

haskell functional-programming

37
推荐指数
3
解决办法
7706
查看次数

GetUserPreferredUILanguages()永远不会返回两种以上的语言

我试图从C ++ / Qt应用程序中检索用户首选语言的完整列表,如用户首选项的“区域和语言”页面中所配置的:

首选语言

为此,我尝试在最新的Windows 10 Pro系统上使用WinAPI函数GetUserPreferredUILanguages()

但是,该函数始终仅返回第一个条目(Windows主要显示语言)和“ en-US”。如果将英语配置为主语言,则仅返回“ en-US”。例如,如果我配置了(德语,法语,英语),则返回[“ de-de”,“ en-US”],则省略了法语。如果我将更多语言添加到列表中,它们也会被省略。我也查看了“ 用户界面语言管理”,但无济于事。例如,GetSystemPreferredUILanguages()仅返回“ en-US”。GetUILanguageFallbackList()返回[“ de-de”,“ de”,“ en-US”,“ en”]。

我使用的代码:

// calling GetUserPreferredUILanguages() twice, once to get number of 
// languages and required buffer size, then to get the actual data

ULONG numberOfLanguages = 0;
DWORD bufferLength = 0;
const auto result1 = GetUserPreferredUILanguages(MUI_LANGUAGE_NAME,
                                                 &numberOfLanguages,
                                                 nullptr,
                                                 &bufferLength);
// result1 is true, numberOfLanguages=2

QVector<wchar_t> languagesBuffer(static_cast<int>(bufferLength));
const auto result2 = GetUserPreferredUILanguages(MUI_LANGUAGE_NAME,
                                                 &numberOfLanguages,
                                                 languagesBuffer.data(),
                                                 &bufferLength);

// result2 is true, …
Run Code Online (Sandbox Code Playgroud)

windows multilingual winapi translation internationalization

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

使用QMake时可能延迟DLL加载?

在我的项目中,我有一组我想加载延迟的DLL,即首次使用而不是进程启动.这意味着我想对某些DLL(而不是Qt本身)使用MSVC链接器的/ DELAYLOAD标志(参见[1]以获得更多解释).原因是一些用户在DLL启动期间遇到崩溃(我们无法重现).以前的非Qt版本的软件没有这个问题,但它使用延迟加载,所以这可能会产生影响.

使用QMake,我发现无法延迟加载工作.有没有人知道如何将/ DELAYLOAD传递给msvc链接器,使用qmake功能绕过qmake?

[1] http://www.codeproject.com/KB/DLL/Delay_Loading_Dll.aspx

qt qmake visual-c++

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