在这里,我找到了一些很好的例子:
// Prepare source somehow.
String source = "package test; public class Test { static { System.out.println(\"hello\"); } public Test() { System.out.println(\"world\"); } }";
// Save source in .java file.
File root = new File("/java"); // On Windows running on C:\, this is C:\java.
File sourceFile = new File(root, "test/Test.java");
sourceFile.getParentFile().mkdirs();
new FileWriter(sourceFile).append(source).close();
// Compile source file.
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, sourceFile.getPath());
// Load and instantiate compiled class.
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { root.toURI().toURL() }); …Run Code Online (Sandbox Code Playgroud) 我有这样的事情:
A //branch 1
\
B - C //branch 2
\
D //branch 3
Run Code Online (Sandbox Code Playgroud)
我想得到这样的东西:
A - E //branch_1
\
B' - C' //branch_2
\
D' //branch_3
Run Code Online (Sandbox Code Playgroud)
我想一次执行一个命令并重新设置所有分支,所以我不必一一重新设置它们。这可能吗?
我想监视我的actor实例,但它不能简单地用new关键字创建.我想出了以下解决方案:
val testActorSpy = spy(TestActorRef(new TestActor).underlyingActor)
val testActorRef = TestActorRef(testActorSpy )
Run Code Online (Sandbox Code Playgroud)
但这样我创造了一个不必要的演员.有没有更清洁的解决方案?
我想要捕获我的宏的输出分配给的变量的名称.与projectbuild.sbt完全相同.如果有的话,我更喜欢开箱即用的解决方案(库),因为它看起来像一般的用例.
这是一个小例子
val someValue = myMacro()
Run Code Online (Sandbox Code Playgroud)
并作为myMacro()我希望得到字符串的输出"someValue".
我在改变控制台尺寸方面遇到了问题.这是我的代码:
BOOL setConsole(int x, int y)
{
hStdin = GetStdHandle(STD_INPUT_HANDLE);
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if (hStdin == INVALID_HANDLE_VALUE ||
hStdout == INVALID_HANDLE_VALUE)
{
MessageBox(NULL, TEXT("GetStdHandle"),
TEXT("Console Error"), MB_OK);
return false;
}
SMALL_RECT windowSize = {0, 0, x-1, y-1};
// Change the console window size:
SetConsoleWindowInfo(hStdout, TRUE, &windowSize);
COORD c = { x, y};
//Change the internal buffer size:
SetConsoleScreenBufferSize(hStdout, c);
SetConsoleDisplayMode(hStdout,CONSOLE_FULLSCREEN_MODE, &c);
return true;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试放大控制台时,它工作得非常好.当一个参数小于前一个参数时,没有任何反应.怎么了?
@edit:经过一些测试我注意到,如果我一次更改一个参数,则可以调整大小(缩小).示例(假设控制台为100x100)
setConsole(90,90); //dosen't work.
setConsole(90,100);
setConsole(90,90); // works perfectly
Run Code Online (Sandbox Code Playgroud)
为什么?!
有没有标准化的方式来形式化我的scala/akka演员api?Imho,我需要了解实现以了解要发送的内容并不是一个好的选择.此外,如果实现已更改并且我的消息不再有效(不调用我认为它调用的操作),我不会收到任何警告或错误.
我想知道以下行为背后的原因是什么?
@ trait Bar
defined trait Bar
@ trait Foo { self: Bar => }
defined trait Foo
@ def x: Foo = ???
defined function x
@ val y: Bar = x
cmd3.sc:1: type mismatch;
found : ammonite.$sess.cmd1.Foo
required: ammonite.$sess.cmd0.Bar
val y: Bar = x
^
Compilation Failed
Run Code Online (Sandbox Code Playgroud)
AFAIU,Foo要求其每个子类型都是 的子类型,Bar那么为什么实例Foo不是 的正确实例Bar?
@编辑
只是为了让问题更清楚:我想知道为什么它会这样工作。一些可能的答案是:
Foo而不是Bar运行时类型的实例)似乎至少 1) 有点正确(隐藏子类型作为实现细节)。
我想在elm中为外部api创建一个http客户端.在scala中,这是OO/FP混合,我会表达这一点(暂时忘记异步),简单如下:
class Client(url: String) {
def getFoo(): String = ???
}
Run Code Online (Sandbox Code Playgroud)
但在榆树林有点迷失.显而易见的解决方案是将url直接传递给函数
module Client
getFoo : String -> String
Run Code Online (Sandbox Code Playgroud)
但这使用起来非常痛苦,因为它使每个调用都变得复杂,因此负担随着定义的函数数量和对这些函数的调用次数而增加.
我试图使用带有函数的记录,例如:
type alias Client = { getFoo: String }
createClient : String -> Client
Run Code Online (Sandbox Code Playgroud)
但感觉就像是对OOP的模仿.AFAIU由Ocaml中的Functors和OOP中的对象解决.
什么是在Elm(或Haskell,如果Elm缺少某些特定功能)的规范方法?
我想解析外部 json 在哪里RequestItem并且FolderItem可以出现在同一个地方。我提供了以下编码,其中每个变体都定义为单独的数据类型:
data RequestItem = RequestItem { name :: String } deriving (Generic, Show)
data FolderItem = FolderItem { item :: [Item] } deriving (Generic, Show)
data Item
= RequestChoice RequestItem
| FolderChoice FolderItem
deriving (Show)
instance FromJSON Item where
parseJSON = (\v -> asum [
RequestChoice <$> (genericParseJSON defaultOptions v),
FolderChoice <$> (genericParseJSON defaultOptions v)
]) :: Value -> Parser Item
Run Code Online (Sandbox Code Playgroud)
这可以简化为单个数据类型定义,消除RequestChoice和FolderChoice?
一个限制:我不想手动编写解析器,而是使用泛型派生。