小编Ada*_*m S的帖子

使用委托来简化函数调用

我有一个布尔函数,用于许多其他函数的决策.并且每次都向用户提供消息框或允许其继续,具体取决于该函数的返回值.所以我的伪代码可能如下所示:

private bool IsConsented()
{
    //some business logic
}

private void NotReal()
{
    if (IsConsented())
    {
        //call function A
    }
    else
    {
        MessageBox.Show("Need consent first.");
    }
}

private void NotReal2()
{
    if (IsConsented())
    {
        //call function B
    }
    else
    {
        MessageBox.Show("Need consent first.");
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种更简单的方法,而不是将if-else逻辑硬编码到我的每个函数中.我希望能够有这样的功能:

private void CheckConsent(function FunctionPointer)
        {
            if (IsConsented())
            {
                //call the function
                FunctionPointer();
            }
            else
            {
                MessageBox.Show("Need consent first.");
            }
        }
Run Code Online (Sandbox Code Playgroud)

这样我就可以将指针传递给函数.我真的怀疑这与委托有关,但我不知道语法,我不明白如何使用委托传递参数.

c#

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

扩展类成员的扩展方法?

我想写一个扩展方法,扩展我班级的一些成员.具体来说,我想扩展一个枚举.但是,这不起作用:

namespace mynamespace
{
    public class myclass
    {
        public enum ErrorCodes
        {
            Error1, Error2, Error3
        }

        public static double GetDouble(this ErrorCodes ErrorCode)
        {
            return (double)((int)ErrorCode);
        }

        public void myfunc()
        {
            ErrorCodes mycode;
            MessageBox.Show(mycode.GetDouble().ToString());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

具体来说,它不会将GetDouble()识别为扩展名.这不仅仅适用于枚举,我尝试为双打创建扩展方法,也遇到了同样的问题.

c# visual-studio

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

在运行时按名称调用函数

我意识到可以使用#'PRINT引用函数来引用PRINT函数.如果我们有一个列表S,其中第一个元素是'PRINT,我们可以使用#(car S)引用它吗?

假设我正在查看一个列表,其中列表中的元素是原子,它们是某些函数的名称.目前,我可以这样做:

(defun aritheval (S)
    (funcall
        (cond
            ((eq '+ (car S)) #'+)
            ((eq '- (car S)) #'-)
            ((eq '* (car S)) #'*)
            ((eq '/ (car S)) #'/)
        )
        '2
        '3
    )
)
Run Code Online (Sandbox Code Playgroud)

此函数将根据列表S中的第一个元素计算2 + 3,2-3,2*3或2/3 .S包含这些函数的名称.

lisp common-lisp

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

比较集合的函数; 有助于提高效率

我正在尝试编写一个比较两个列表的函数,看它们是否代表相同的集合.这是'(a b c d d)'(d c b a d)代表同一组.元素可以是任何顺序.

这就是我所拥有的,它有效:

(defun samesetp (list1 list2)
  (cond
    ((null list1) (null list2))
    ((eq list2 (remove (car list1) list2 :count 1)) nil)
    (t (samesetP (cdr list1) (remove (car list1) list2 :count 1))))))
Run Code Online (Sandbox Code Playgroud)

我不喜欢这个的原因(remove (car list1) list2 :count 1))是计算两次 - 一次测试remove操作是否真正删除了任何东西,一次递归测试列表的其余部分没有.

任何人都可以提出一种方法来改善这一点,而不使用不同的算法

lisp common-lisp

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

帮助解析字符串(可能使用正则表达式)

我有一个看起来像这样的字符串:

-2.2,1.1-6.9,2.3-12.8,2.3
Run Code Online (Sandbox Code Playgroud)

我想写一个函数ParseString(),它将返回带有这些元素的双精度列表:

-2.2
1.1
-6.9
2.3
-12.8
2.3
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是减号的作用类似于分隔符,但也具有语义含义(表示负数).我对正则表达式缺乏经验,我坚持这个.任何专家可以帮我解决这个问题吗?我是用C#写的.

c# regex string

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

实时密码规则检查器?

我正在为我的学校做一些初步调查(我作为学生在IT部门工作).这里的学生必须每6个月更改一次密码,其中许多人都很难实施强制执行的(多个)密码规则.也就是说,他们经常不得不多次尝试设置新密码.

规则是:

  • 长度不得超过8个字符
  • 必须包含4种类型的字符中的3种(大写,小写,数字,特殊字符)
  • 不得包含用户的名字,姓氏或中间名
  • 不得包含用户的用户名
  • 不得匹配之前使用的任何密码
  • 用户必须输入两次密码,输入的密码必须完全匹配

我有几个问题:

  • 是否有可能创建一个基于Web的密码检查器,在用户输入新密码时提供实时反馈?我正在想象一个网页一侧的清单,其中绿色复选标记被激活,因为密码符合更多标准.
  • 是否可以安全地完全执行此检查并完全在客户端执行?
  • 从哪里开始这样的任务?有没有可以推荐的指南?

请记住,我不是网络开发人员.此外,请留下任何诙谐的评论,例如"更改密码政策"或"他们只是愚蠢的用户".

javascript ajax

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

OpenCL:多个clEnqueueNDRangeKernel()调用

我很困惑clEnqueueNDRangeKernel()多次调用时的工作原理.假设我排队10次(例如,使用for循环),每次使用global_work_size = 32.假设内核采用了一个全局参数,它用get_global_id(0)填充.

我的问题是关于global_id的枚举.

我的期望:编号最高的global_id将是(10*32-1)= 319.

实际发生的事情:编号最高的global_id是(32-1)= 31.

任何人都可以解释每个工作项是如何逐步枚举的,因为进行了多个clEnqueueNDRangeKernel()调用?

opencl

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

从文件读取时出现分段错误

我有以下功能:

void read_file(char* path, char** data)
{
    FILE*   file = NULL;
    size_t  size, result = 0;

    *data = NULL;
    file = fopen(path, "rb");

    if (file == NULL)// error opening file
    {
        return;
    }

    fseek(file, 0, SEEK_END);
    size = ftell(file) + 1;
    rewind(file);

    *data = (char*)malloc(size);
    if(*data == NULL)
        return;

    result = fread(*data, 1, size, file);
    if (result != size - 1)// error reding file
    {
        *data = NULL;
    }
    printf("LINE=%u\n", __LINE__);
    (*data)[size-1] = '\0';

    printf("LINE=%u\n", __LINE__);
    fclose(file);
    return;
}
Run Code Online (Sandbox Code Playgroud)

我在两个 …

c

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

重定向从可执行文件重定向输出,但不是所有输出重定向?

我遇到一个问题,我无法完全重定向可执行文件的输出.为了讨论,让我们说可执行文件是printnames.exe.

如果我这样做printnames.exe(没有重定向),命令窗口中会显示以下输出:

Adam
Tim
Jesse
Sean
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做printnames.exe > myfile.txt,命令窗口显示:

Tim
Sean
Run Code Online (Sandbox Code Playgroud)

......的内容myfile.txt是:

Adam
Jesse
Run Code Online (Sandbox Code Playgroud)

这怎么可能?代码中的内容会导致这种行为?重定向操作符不应该重定向所有输出吗?

windows redirect

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

帮助编写正则表达式

几乎一个月前我在这里问过一个非常类似的问题.

我正在努力理解正则表达式,但没有任何意义.SLak在这一问题解决的效果很好,但是当我尝试使用正则表达式助手在http://gskinner.com/RegExr/只的第一个逗号匹配-2.2,1.1-6.9,2.3-12.8,2.3时给出的正则表达式,|(?<!^|,)(?=-)

换句话说,我找不到一个甚至可以帮助我理解它的正则表达式工具.好吧,够抱怨了.现在我想重新写这个正则表达式,这样我可以做一个Regex.Split()将字符串分隔2.2 1.1-6.9,2.3-12.8 2.3-2.2,1.1,-6.9,2.3,-12.8,和2.3.

上述问题的不同之处在于现在可以存在前导和/或尾随空格,并且空白可以像逗号一样充当分隔符.

我尝试使用\s|,|(?<!^|,)(?=-)但这不起作用.我尝试使用它来分割293.46701,72.238185,但C#只是告诉我"输入字符串的格式不正确".请注意,SO无法正确显示前导和尾随空格.

编辑:这是执行的代码,以及执行代码后的变量和值. 在此输入图像描述

c# regex

0
推荐指数
1
解决办法
231
查看次数

将MatchCollection转换为双精度数组

我有以下代码生成MatchCollection:

var tmp3 = myregex.Matches(text_to_split);
Run Code Online (Sandbox Code Playgroud)

Matchestmp3都是字符串,如93.4-276.2.我真正需要的是将此MatchCollection转换为双精度数组.如何才能做到这一点?

c# regex

0
推荐指数
1
解决办法
1784
查看次数

无法访问嵌套哈希值中的值

我正在尝试访问一些深度为二深的列表.这是我的代码:

my %english = (
    greetings => [("Hello", "What's up?")],
);

my %spanish = (
    greetings => [("Hola", "Que pasa?")],
);

my %bighash = (
    english => %english,
    spanish => %spanish,
);

print 'English greetings: ';
if (my $array = $bighash{'english'}{'greetings'}) {
    print "\n$_" for @$array
}
else {
    print 'Fail.';
}
Run Code Online (Sandbox Code Playgroud)

但是,if条件始终评估为"false".为什么是这样?

perl

0
推荐指数
1
解决办法
77
查看次数

优雅的方式在没有goto的情况下在C++中执行多个依赖错误检查,而且没有提前返回?

假设我想连续调用四个函数,这些函数在我的某个对象上运行.如果其中任何一个失败,我想返回FAILURE而不调用其他人,我想要返回SUCCESSiff所有这些都成功完成.

通常,我会做这样的事情:

if(function_zero(&myMutableObject) == SUCCESS)
{
    return FAILURE;
}
if(function_one(&myMutableObject) == SUCCESS)
{
    return FAILURE;
}
if(function_two(&myMutableObject) == SUCCESS)
{
    return FAILURE;
}
if(function_three(&myMutableObject) == SUCCESS)
{
    return FAILURE;
}

return SUCCESS;
Run Code Online (Sandbox Code Playgroud)

或者,如果我需要做一些清理:

if(function_zero(&myMutableObject) == SUCCESS)
{
    status = FAILURE;
    goto cleanup;
}
if(function_one(&myMutableObject) == SUCCESS)
{
    status = FAILURE;
    goto cleanup;
}
if(function_two(&myMutableObject) == SUCCESS)
{
    status = FAILURE;
    goto cleanup;
}
if(function_three(&myMutableObject) == SUCCESS)
{
    status = FAILURE;
    goto cleanup;
}

cleanup:
// necessary …
Run Code Online (Sandbox Code Playgroud)

c++ error-handling goto

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

标签 统计

c# ×5

regex ×3

common-lisp ×2

lisp ×2

ajax ×1

c ×1

c++ ×1

error-handling ×1

goto ×1

javascript ×1

opencl ×1

perl ×1

redirect ×1

string ×1

visual-studio ×1

windows ×1