小编Mat*_*hew的帖子

Groovy可选括号和圆点

我正在学习Groovy并且对它如何构建智能DSL感到非常印象深刻,但我对括号和点是可选的规则感到有些困惑.请考虑以下代码:

Integer take(Integer x) {x}
take 3 plus 4
Run Code Online (Sandbox Code Playgroud)

这按预期工作并产生7的输出(当在控制台中运行时),因为groovy将最后一行理解为take(3).plus(4).

现在,println take 3 plus 4并不像groovy那样理解那println(take).3(plus).4是无稽之谈.

我所看到的每个例子都显示出这些表达式,但显然是这样

s = take 3 plus 4
Run Code Online (Sandbox Code Playgroud)

在s中工作并存储结果7.我的问题是,为什么呢

println( take 3 plus 4 )
Run Code Online (Sandbox Code Playgroud)

不行?显然,groovy会解析这些表达式,即使它们不是在一条线上(如赋值工作所示).我原以为添加这些括号会消除那条不起作用的形式的歧义,并且它会按照我的意图打印7.

相反,groovy会给出错误'意外令牌:3'.据我所知,groovy不会允许println中的可选括号或点,即使它看起来不明确.什么时候这种技巧确实有效?

dsl groovy

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

无法在java 9下针对java 8构建javafx应用程序

我正在尝试构建一个应用程序,该应用程序具有使用JavaFX构建的GUI,并使用java 9的新版本标记来定位Java 8.

编译

import javafx.application.Application;

public class Testing {
    public static void main(String... args) {

    }
}
Run Code Online (Sandbox Code Playgroud)

用java定位java时

javac Testing.java
Run Code Online (Sandbox Code Playgroud)

工作正常(也在使用时--release 9),但是当我添加发布标志时

javac --release 8 Testing.java
Run Code Online (Sandbox Code Playgroud)

它无法编译给出不存在的错误

Testing.java:1:error: package javafx.application does not exist
Run Code Online (Sandbox Code Playgroud)

在JDK8 javac下编译时没有问题.我已尝试使用该--add-modules标志添加jfx模块,但在将版本设置为8时不允许使用该标志.

有没有办法在java 9下完成这项工作?看来它并不认为jfx软件包包含在java 8中,但它们是(至少在oracle的发行版中).

我在Windows上使用java 9的发行版,并且在最新的java 8版本中构建了相同的应用程序而没有任何问题.


我尝试在使用标志进行编译时将java 8安装(而不是rt.jar)中的jfxrt.jar添加到类路径中,并且它确实有效.--release 8

我的理解是发布标志的一个目的是消除安装多个JDK版本的需要(或者至少是他们的rt.jar文件).我不确定是否只是为了消除编译这个文件的需要,或者意图是不需要针对任何JDK打包文件进行编译(并且jfxrt.jar包含在JDK8中[至少在Oracle的版本]不需要特殊标志或类路径修改来使用它).

在没有确定意图的情况下,某些东西在java 8下完全编译似乎是错误的,但是需要额外的jar来编译(并且只编译不运行)在针对java 8的java 9下(但是在针对java 9时不能),以及因此需要多个JDK.对于那些更熟悉发布标志的预期实现的人来说,这应该是这样的吗?

java javac javafx-8 java-9

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

是否需要java的finalize方法?

我读过的关于java finalize方法的所有内容都说不要使用它.它似乎几乎永远不会被保证被调用,即使它存在也可能出现问题.

还有一些其他问题要求何时使用它,似乎普遍的共识绝不是.

我自己从未使用它(主要是因为没有警告),我没有看到它在任何地方使用过.

是否有任何合适的案例?有没有其他选择的情况?

如果没有,为什么会在那里?是否有内部类使用它并要求方法可用?或者它只是不应该存在的东西?

我对使用它的时间并不是那么感兴趣(已经用"从不"回答),但澄清为什么它甚至给出了"从不"的回答.如果它是如此无用和危险,为什么它没有被折旧和删除?

java finalize

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

Gnuplot 将每个点连接在一起

我在 gnuplot 中绘制数据,如下所示:

set terminal pdf
set output "Planck.pdf"
plot "CalculatedValues.dat" u 1:2 t "Dawn" pt 1 ps .1 with lines
Run Code Online (Sandbox Code Playgroud)

但我的输出最终看起来像一个纱线雕塑,

在此处输入图片说明

我希望输出看起来像一个折线图而不是散点图。

在此处输入图片说明

我究竟做错了什么?

这是一些数据:

13.4904 3.13714e+07     3.91106e+07
11.3872 4.64475e+07     5.96647e+07
18.0928 1.40999e+07     1.69117e+07
13.3284 3.23223e+07     4.03737e+07
1.3264  3309.46 24012.2
0.323113        5.16869e-25     1.764e-21
10.6252 5.35423e+07     6.97629e+07
Run Code Online (Sandbox Code Playgroud)

它是制表符分隔和新行分隔

gnuplot

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

浓咖啡检查是否未显示对话框

我有一种方法可以检查几个条件,并在满足条件时调用另一个活动。当不满足条件时,它将显示一个错误对话框(当前正在使用DialogFragment显示警报对话框)。该方法如下所示:

void checkAndCall() {
    CustomObject o1 = null;
    try {
        o1 = CustomObject.parse(editText1.getText().toString());
    } catch (CustomException e) {
        handleBadCase(e);
        return;
    }

    CustomObject o2 = null;
    try {
        o2 = CustomObject.parse(editText2.getText().toString());
    } catch (CustomException e) {
        handleBadCase(e);
        return;
    }

    callOtherActivity();
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我忘记了一个return语句,这导致该方法下降到下一个检查(失败)并显示两个错误对话框。我想确保不会再发生这种情况,因此为此编写了一个测试。

我的测试看起来像这样:

public class TestClass {

    @Rule
    public ActivityTestRule<MyActivity> mActivityRule = new ActivityTestRule<>(MyActivity.class);

    @Test
    public void onlyOneDialogAppearsWithEmptySolve() {
        /* Hit solve with no text entered */
        onView(withId(R.id.solve_button)).perform(click());

        /* Check that dialog is displayed */
        onView(isRoot()).inRoot(isDialog()).check(matches(isDisplayed()));

        /* Press cancel */
        onView(withText(getString(R.string.cancel))).perform(click()); …
Run Code Online (Sandbox Code Playgroud)

android automated-tests dialog android-espresso

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

gnuplot:在多图模式下绘制单个调色板

我想就以下主题寻求一些帮助:

以下代码在同一页上生成 3 个图(3 行,1 列):

set terminal postscript color
set output "test.ps"
file="test.dat"

set palette rgb 33,13,10  
set cblabel "[km]"
set cbtics 2.5, 5, 20 format "%.0f"

set lmargin at screen 0.08
set rmargin at screen 0.88
# BUILD FROM BOTTOM TO TOP #
TOP=0.92  #
DY = 0.27 # DIMENSION OF Y

set multiplot
set grid
set offset 0, 0, graph 0.05, graph 0.05 

#unset colorbox
# BOTTOM GRAPH #
set xlabel "Second of the Week [s]"
set …
Run Code Online (Sandbox Code Playgroud)

gnuplot color-palette

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

SVG mm 和 px 坐标长度因定义的 viewBox 而不同

在下面的 SVG 图像中,我希望两个矩形位于相同的位置并具有相同的大小,但事实并非如此。

我对 viewBox 属性的理解是,在这个例子中 10px 应该等于 1mm。这是正确的还是我错过了什么?

<?xml version="1.0" standalone="yes"?>
<svg 
    width="210mm" 
    height="297mm" 
    viewBox="0,0,2100,2970"
    preserveAspectRatio="none"        
    xmlns="http://www.w3.org/2000/svg">
        <rect x="10mm" y="10mm" width="50mm" height="50mm"
            fill="rgba(155,155,155,0.5)" id="x1" ></rect> 
        <rect x="100" y="100" width="500" height="500"
            fill="rgba(155,155,155,0.5)" id="x2" ></rect> 

    </svg>
Run Code Online (Sandbox Code Playgroud)

结果图像

提前致谢!

svg

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

使用xmltodict从已解析的xml文件的键中删除特殊字符

我已经使用该xmltodict模块解析了一个xml文件,并将结果存储在词典的字典中。

现在我想删除的特殊字符@,并#在字典中的每一个关键。

def remove_using_json(parse_result):
    data = {}
    data = json.dumps(parse_result)
    #print data
    #for d in data:
    for key, value in data.iterkeys():
        if key[0] == '@':
            data[key]=key.strip("@")
        elif key[0] == '#':
            data[key] =key.strip("#")
Run Code Online (Sandbox Code Playgroud)

python xml xml-parsing xmltodict

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