小编Lau*_*ves的帖子

C#如何调用参数数量未知的方法

我在这里达到了我的技能极限.我甚至不知道这是否可行 - 但我希望是这样.

我正在制作一个命令处理程序(文本).对于每个,Add()您可以指定所需参数的数量及其类型.例如:

void Add(string commandName, int requiredParameters, params Type[] paramTypes) { }
Add("test", 2, typeof(string), typeof(int));
Run Code Online (Sandbox Code Playgroud)

所以一个示例命令是:/test hello 7.命令处理程序检查以确保类型是正确的,例如,如果第二个参数不能转换为int,它将失败.

现在我遇到的问题是我想传递一个方法Add().(如果所有检查都通过,命令处理程序将调用此方法,并使用所需参数调用它).因此,所讨论的方法可以根据传入的内容包含任意数量的参数Add().

我该如何实现这一目标?代表不起作用抱怨参数不匹配.我尝试过这样的事情:

void Add<T1, T2>(..., Action<T1, T2> method) { }
Add(..., new Action<string, int>(cmd_MyMethod));
Run Code Online (Sandbox Code Playgroud)

但我必须为很多类型创建一个Add()方法.例如Add<T1, T2, T3, T4, etc>,它也使得输入调用变得很麻烦Add().

希望作为一个字符串传递给调用的方法,然后用this.GetType().GetMethod()得到它的句柄.虽然这种方式是理想的,但是当我进行模糊处理时它会变得混乱.

有谁知道有任何方法可以做到这一点?提前致谢.

.net c# reflection visual-studio

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

在gradle的应用程序插件生成的启动脚本中,如何将程序名称传递给应用程序?

执行gradle这个应用程序插件的installDist任务创建一个目录,其中包含包装脚本,和.运行这些脚本中的任何一个都会运行应用程序,并且传递给这些脚本的参数将传递给底层应用程序.build/install/my-application-name/binmy-application-namemy-application-name.bat

在UNIX shell脚本中,您可以访问用于执行程序的名称$0.实际上,gradle生成的启动脚本的UNIX版本使用$0了几次.

如何配置gradle应用程序插件,以便这些脚本可以将$0(以及Windows上等效的Windows)的值传递到底层应用程序中,可能作为Java系统属性?

java gradle

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

使用Javascript将嵌套的JSON转换为HTML嵌套列表

我使用JSON(而不是XML)相当新,我目前正在使用Javascript来消化,解析和显示我返回的JSON数据.

我正在使用JSON2.js库并返回一些有效的JSON数据,表示一个相当简单的嵌套列表:

{
  "node":{
    "class":"folder",
    "title":"Test Framework",
    "node":{
      "class":"folder",
      "title":"Item 1",
      "node":{
        "class":"folder",
        "title":"Item 1.1",
        "node":{
          "class":"file",
          "title":"Item 1.1.a"
        }
      },
      "node":{
        "class":"folder",
        "title":"Item 1.2",
        "node":{
          "class":"file",
          "title":"Item 1.2.a"
        },
        "node":{
          "class":"file",
          "title":"Item 1.2.b"
        },
        "node":{
          "class":"file",
          "title":"Item 1.2.c"
        }
      },
      "node":{
        "class":"folder",
        "title":"Item 1.3",
        "node":{
          "class":"folder",
          "title":"Item 1.3.a",
          "node":{
            "class":"file",
            "title":"Item 1.3.a.i"
          },
          "node":{
            "class":"file",
            "title":"Item 1.3.a.ii"
          }
        }
      }
    },
    "node":{
      "class":"folder",
      "title":"Item 2",
      "node":{
        "class":"file",
        "title":"item 2.a"
      },
      "node":{
        "class":"file",
        "title":"Item 2.b"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有人有任何指针可以快速将该批次转换为具有所有嵌套元素的UL?如果JSON中的"class"元素可以用作每个LI的类,那也很酷. …

javascript json nested list

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

在Java中:如何让线程监视另一个线程?

对不起,如果问题很简单.我是初学者.

我必须创建调用某些东西的线程,而第一个线程工作,另一个必须测量第一个线程是否在指定时间内计算函数.如果没有,它必须抛出异常.否则它会返回答案.

java multithreading

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

你可以使用glVertexAttribPointer将较小的向量分配给较大的向量吗?

OpenGL®ES着色语言的第5.8节(v1.00,r17)[PDF](强调我的):

赋值运算符将rvalue-expression的值存储到l值中,并返回具有lvalue-expression类型和精度的r值.lvalue-expression和rvalue-expression必须具有相同的类型.必须通过构造函数显式指定所有需要的类型转换.

所以听起来像做这样的事情是合法的:

vec3 my_vec3 = vec3(1, 2, 3);
vec4 my_vec4 = my_vec3;
Run Code Online (Sandbox Code Playgroud)

为了使其合法,第二行必须是这样的:

vec4 my_vec4 = vec4(my_vec3, 1); // add 4th component
Run Code Online (Sandbox Code Playgroud)

我认为glVertexAttribPointer有类似的要求.也就是说,如果你指定的vec4size参数必须等于4.

然后我遇到了AndroidGLES20TriangleRenderer示例.一些相关的片段:

attribute vec4 aPosition;

maPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition");

GLES20.glVertexAttribPointer(maPositionHandle, 3, GLES20.GL_FLOAT, false,
        TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices);
Run Code Online (Sandbox Code Playgroud)

所以aPosition是一个vec4,但glVertexAttribPointer用于设置它的调用有一个size3.这个代码是否正确,是GLES20TriangleRenderer依赖于未指定的行为,还是有其他我缺少的东西?

opengl-es glsl opengl-es-2.0

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

管道从java应用程序到ffmpeg子进程的图像系列

我正在寻找一种方法将java应用程序中的系列图像(jpegs)流式传输到FFMpeg STDIN管道.FFMpeg应处理这些图像并创建视频文件作为输出.

使用以下命令"ffmpeg.exe -i pipe:0 out.avi"将FFMpeg作为java应用程序的子进程执行

当我在控制台中运行"ffmpeg -i input.jpg out.avi"命令时,我按预期得到"out.avi"文件

但是当我在我的java应用程序中使用以下测试器代码时,我收到了一个错误.

Java应用程序中的代码:

File ffmpeg_output_msg = new File("ffmpeg_output_msg.txt");
ProcessBuilder pb = new ProcessBuilder(
        "ffmpeg.exe","-i","pipe:0","out.avi");
pb.redirectErrorStream(true);
pb.redirectOutput(ffmpeg_output_msg);
pb.redirectInput(ProcessBuilder.Redirect.PIPE);
Process p = pb.start();
OutputStream ffmpegInput = p.getOutputStream();

byte[] image;
File file = new File("input.jpg");
image = new byte[(int)file.length()];

FileInputStream fileInputStream = new FileInputStream(file);
fileInputStream.read(image);

ImageInputStream iis = ImageIO.createImageInputStream(
        new ByteArrayInputStream(image));
BufferedImage img = ImageIO.read(iis);

ImageIO.write(img, "JPEG", ffmpegInput);
Run Code Online (Sandbox Code Playgroud)

FFMpeg输出:

ffmpeg版本N-59664-g94cf4f8版权所有(c)2000-2014 FFmpeg开发人员于2014年1月7日22:07:02建立了gcc 4.8.2(GCC)
配置: - enable -gpl --enable-version3 --disable -w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls …

java bufferedimage ffmpeg pipe

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

Android资源XML的`<attr>`元素的文档在哪里?

我正在阅读Ha Duy Trung的教程在您的Android应用程序中支持多个主题,其中包含以下代码片段values/attrs.xml:

<attr name="themedMenuStoryDrawable" format="reference" />
<attr name="themedMenuCommentDrawable" format="reference" />
Run Code Online (Sandbox Code Playgroud)

这个<attr>元素实际记录在哪里?查看提供资源的Android API指南,我找不到任何关于此类元素的提及.

我确实<attr>创建视图类中找到了元素,但是它们都出现在<declare-styleable>元素内部,并且几乎没有任何关于这些元素如何工作的解释.

<attr>元素是否有适当的参考文档?如果没有,那么:

  • <attr>直接有一个元素是什么意思<resources>
  • format属性的含义是什么,它可以采用什么值?
  • 还有哪些其他XML属性<attr>
  • 可以<attr>作为除了<resources>和以外的任何东西的孩子出现<declare-styleable>

我特别想知道如何<attr>在主题(而不是自定义视图)的上下文中使用,尽管它的工作原理的文档会更好.

android android-resources

5
推荐指数
0
解决办法
228
查看次数

当样式同时具有父属性和点分名称时,继承行为如何?

根据《 Android API指南的样式和主题》,一种样式可以两种不同的方式从另一种样式继承:

  • 它可以具有一个parent属性:

    元素中的parent属性<style>可让您指定样式,样式应从该样式继承属性。您可以使用它来继承现有样式的属性,并仅定义要更改或添加的属性。

  • 只要继承的样式是一种“您已经定义了自己”,它就可以带有点分名称:

    如果您想继承自定义的样式,则不必使用parent。相反,您可以使用点表示法,方法是将要继承的样式的名称前缀为新样式的名称,并用句点分隔。

如果a <style>既有父母又有点名,该怎么办?例如,如果我有:

 <style name="Foo.Bar.Baz" parent="Pen.Pinapple.Apple.Pen">
Run Code Online (Sandbox Code Playgroud)

是否Foo.Bar.BazFoo.Bar和都继承Pen.Pinapple.Apple.Pen?如果在Foo.Bar和中都设置了属性Pen.Pinapple.Apple.Pen,它将获得哪个值Foo.Bar.Baz?那么在其他情况下(例如在中设置了属性Pen.Pineapple但又在中设置了parent)又Foo.Bar如何呢?究竟是什么级联规则,它们在哪里记录?

android android-theme android-styles

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

使用 IdeaVim + IntelliJ IDEA 时,如何映射 Ctrl-W 以关闭当前编辑器选项卡?

我希望 Ctrl-W 关闭 IntelliJ IDEA 中的当前编辑器选项卡。我使用 IdeaVim,不知何故这似乎阻碍了我的尝试。

我尝试过但不起作用的事情:

  • 向设置添加“Ctrl+W”快捷方式?键盘映射?主菜单 ?窗户 ?编辑器标签?关闭。如果我禁用 IdeaVim,这确实有效。
  • 向设置添加“Ctrl+W”快捷方式?键盘映射?插件?创意维姆?关闭当前窗口。这似乎根本没有任何作用!?
  • :nmap <C-W> <C-F4> (Ctrl-F4 的默认快捷方式做我想要的——我只想要 Ctrl-W 做)

我还尝试使用“Ctrl-W c”的普通 vim 键,但这会关闭所有编辑器选项卡,而不仅仅是当前的选项卡。

IdeaVim 似乎也不知道:wincmd:tabclose.

当 IdeaVim 处于活动状态时,是否有任何方法可以将 Ctrl-W 设置为关闭当前编辑器选项卡的快捷方式(理想情况下在正常模式下,但所有模式也都可以)?

intellij-idea ideavim

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

AWS Lambda 是否严格按顺序处理 DynamoDB 流事件?

我正在编写一个 Lambda 函数来处理来自 DynamoDB 流的项目。

我认为 Lambda 背后的部分观点是,如果我有大量事件爆发,它会启动足够多的实例来同时处理它们,而不是通过单个实例按顺序提供它们。只要两个事件有不同的键,我就可以处理它们的乱序。

但是,我刚刚阅读了有关“了解重试行为”的页面,其中说:

对于基于流的事件源(Amazon Kinesis Data Streams 和 DynamoDB 流),AWS Lambda 轮询您的流并调用您的 Lambda 函数。因此,如果 Lambda 函数失败,AWS Lambda 会尝试处理出错的记录批次,直到数据过期为止,对于 Amazon Kinesis Data Streams 来说,最长可能需要 7 天。该异常被视为阻塞,并且 AWS Lambda 不会从流中读取任何新记录,直到失败的记录批次过期或成功处理。这可确保 AWS Lambda 按顺序处理流事件。

“AWS Lambda 按顺序处理流事件”是否意味着 Lambda 无法同时处理多个事件?有没有办法让它同时处理来自不同键的事件?

amazon-web-services amazon-dynamodb aws-lambda amazon-dynamodb-streams

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