我使用Happy来生成解析器.
我发现当我给它的标记部分语法比顶层更低时(比如给它一个表达它自己,这不是一个声明的一部分),我得到一个"内部快乐"错误"而不是解析错误.
有没有办法覆盖,notHappyAtAll以便我可以打印比"内部快乐错误"更好的错误消息?显然,除了更改自动生成的解析器文件之外,我每次更新语法时都必须这样做.
我似乎无法捕捉到被抛出的异常Start-Service.这是我的代码:
try
{
start-service "SomeUnStartableService"
}
catch [Microsoft.PowerShell.Commands.ServiceCommandException]
{
write-host "got here"
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,抛出异常但没有捕获:
*Service 'SomeUnStartableService' start failed.
At line:3 char:18
+ start-service <<<< "SomeUnStartableService"
+ CategoryInfo : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service], ServiceCommandException
+ FullyQualifiedErrorId : StartServiceFailed,Microsoft.PowerShell.Commands.StartServiceCommand*
Run Code Online (Sandbox Code Playgroud)
$ErrorActionPreference 设置为停止,所以这不应该是问题.
当我将代码更改为时catch [Exception],将捕获异常并打印"到达此处".
是否start-service抛出ServiceCommandException或其他什么东西?它看起来好像是但我无法抓住它!
---编辑---
理想情况下,我可以编写以下内容,如果start-service没有抛出异常则抛出异常,并且只捕获由start-service以下引发的异常:
try
{
start-service "SomeUnStartableService"
throw (new-object Exception("service started when expected not to start"))
}
catch [Microsoft.PowerShell.Commands.ServiceCommandException]
{
write-host "got here"
}
Run Code Online (Sandbox Code Playgroud) 有关如何编写返回进程实例数的函数的任何想法都在运行?
也许是这样的?
function numInstances([string]$process)
{
$i = 0
while(<we can get a new process with name $process>)
{
$i++
}
return $i
}
Run Code Online (Sandbox Code Playgroud)
编辑:开始编写一个函数...它适用于单个实例但如果运行多个实例则会进入无限循环:
function numInstances([string]$process)
{
$i = 0
$ids = @()
while(((get-process $process) | where {$ids -notcontains $_.ID}) -ne $null)
{
$ids += (get-process $process).ID
$i++
}
return $i
}
Run Code Online (Sandbox Code Playgroud) 有没有人知道Haskell中是否有一个函数可以做这样的事情:
"Int" -> Int
"String" -> String
"Bool" -> Bool
Run Code Online (Sandbox Code Playgroud)
即.它采用类型构造函数名称的字符串表示形式,并将其转换为实际类型构造函数,包括表达式和模式.
编辑:我的总体目标是简化:
transExp (Add exp1 exp2) vars
= transExp exp1 vars ++ transExp exp2 vars ++ [IAdd]
transExp (Sub exp1 exp2) vars
= transExp exp1 vars ++ transExp exp2 vars ++ [ISub]
Run Code Online (Sandbox Code Playgroud)
进入单个模式匹配,所以基本上将Add或Sub转换为字符串,在前面添加"I",并将其转换回类型.
我喜欢坚持使用StyleCop的格式化规则来使代码变得更好和清晰,但我最近遇到了一个警告问题:
所有using指令必须放在命名空间内.
我的问题是我使用指令,程序集引用(用于模拟文件删除),以及在我的一个测试类中使用的命名空间:
using System;
using System.IO;
using Microsoft.Moles.Framework;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[assembly: MoledType(typeof(System.IO.File))]
namespace MyNamespace
{
//Some Code
}
Run Code Online (Sandbox Code Playgroud)
以上允许测试运行正常 - 但StyleCop抱怨使用指令不在命名空间内.
将usings放在命名空间内会产生"MoledType"无法识别的错误.
将usings和程序集引用放在命名空间中会产生错误
'assembly'不是此声明的有效属性位置.此声明的有效属性位置为"type".此块中的所有属性都将被忽略.
似乎我已经尝试了所有的布局,但无济于事 - 要么解决方案不会构建,嘲弄将无效或StyleCop抱怨!
有没有人知道如何设置这些以便一切都快乐?或者在这种情况下我是否必须忽略StyleCop警告?
我试图在java字节码中做一些错误处理.我首先尝试实现一些类似catch的子例程,在那里我将检查错误情况,并跳转到相应的子例程,有点像:
iconst_1
iconst_0
dup
ifeq calldiverr
goto enddivtest
calldiverr:
jsr divError
enddivtest:
idiv
...More instructions...
divError:
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "Oh dear you divided by 0!"
invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V
Run Code Online (Sandbox Code Playgroud)
上面的问题是当我有多个指令跳转到这个子程序时,我在运行字节码时收到一条错误信息,说堆栈高度不一致.
也许使用例外是解决这个问题的最佳方法?
通过一些谷歌搜索,我发现你可以创建Exception类的实例,并用以下内容初始化它们:
new java/lang/Exception
dup
ldc "exception message!"
invokespecial java/lang/Exception/<init>(Ljava/lang/String;)V
Run Code Online (Sandbox Code Playgroud)
我也发现你可以扔它们,athrow这似乎没问题.
然而令我感到困惑的是如何捕获异常.似乎有一个神奇的"异常表"将异常的抛出和捕获粘在一起,但我不知道如何从头开始编写字节码(以及使用Jasmin进行汇编)时定义其中一个.有人可以告诉我创建异常表的秘诀吗?并且可能给我一个与jasmin汇编的异常处理示例?
我不确定在使用别名时如何解决模糊的列引用.
想象一下两个表,a并且b都有一个name列.如果我连接这两个表并为结果添加别名,我不知道如何引用这name两个表的列.我尝试了一些变体,但它们都不起作用:
SELECT a.name, b.name
FROM (a INNER JOIN b ON a.id = b.id) AS x
Run Code Online (Sandbox Code Playgroud)
这不起作用,a并且b超出范围.
SELECT x.a.name, x.b.name
FROM (a INNER JOIN b ON a.id = b.id) AS x
Run Code Online (Sandbox Code Playgroud)
SQL语法不能像那样工作.
SELECT x.name, x.name
FROM (a INNER JOIN b ON a.id = b.id) AS x
Run Code Online (Sandbox Code Playgroud)
那简直太模糊了!
我完全没有想法 - 任何帮助都会非常感激.
我找到了DeploymentItem
[TestClass(), DeploymentItem(@"TestData\")]
Run Code Online (Sandbox Code Playgroud)
在构建测试并在不同计算机上运行时,不会将我的测试数据文件复制到同一位置.
测试数据文件被复制到我机器上测试项目的"bin\debug"目录中,但在我朋友的机器上,它们被复制到"TestResults\name_machine YY-MM-DD HH_MM_SS\Out".
我的机器上的bin\debug目录可以使用以下代码获得:
string appDirectory =
Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
Run Code Online (Sandbox Code Playgroud)
相同的代码将返回TestResults\*name_machine YY-MM-DD HH_MM_SS*\Out我的朋友PC.
然而,这不是真正的问题.问题是我制作的测试数据文件有一个文件夹结构,这个文件夹结构只在我的机器上复制到bin\debug时保留,而在我的朋友机器上只有文件被添加到TestResults\*name_machine YY-MM-DD HH_MM_SS*\Out目录中.这意味着测试将通过我的机器并失败!
有没有办法确保DeploymentItem始终复制到bin\debug文件夹?或者确保在DeploymentItem将文件复制到文件TestResults\*name_machine YY-MM-DD HH_MM_SS*\Out夹时保留文件夹结构的方法?
我已经编写了一个应用程序(wpf - 将Mono翻译为Mac吗?),我希望以某种方式移植到Mac OS X.此应用程序涉及使用user32.dll执行鼠标单击(类似这样):
[DllImport("user32.dll")]
static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)
我听说Mono对于为多个平台制作应用程序很有用 - 有没有办法让我的代码与Mac兼容?
如果没有,有没有办法可以使用相当于user32.dll的Mac来调用鼠标?还有一种方法可以检测程序是在Windows或Mac OS上运行,以选择运行哪些代码?
有谁知道Android MediaCodec在解码HEVC时支持的分辨率是多少?
通过反复试验,我发现以下工作:
640x272
720x304
960x400
1280x528
1920x800
2560x1072
Run Code Online (Sandbox Code Playgroud)
而以下情况则不然:
512x216
3840x1600
Run Code Online (Sandbox Code Playgroud)
有官方文档吗?
c# ×3
exception ×2
haskell ×2
powershell ×2
try-catch ×2
alias ×1
ambiguous ×1
android ×1
android-ndk ×1
assemblies ×1
bytecode ×1
click ×1
happy ×1
hevc ×1
instances ×1
jasmin ×1
java ×1
macos ×1
mono ×1
mouseevent ×1
mstest ×1
namespaces ×1
parsing ×1
postgresql ×1
process ×1
service ×1
sql ×1
string ×1
stylecop ×1
testing ×1
types ×1
unit-testing ×1
using ×1