пример использования scala.collection.immutable. Набор от Java

Делает любого там, кто знаком с Scala, знают, как я мог использовать scala.collection.immutable. Набор от Java? Я могу неопределенно считать scaladoc, но не уверен, как назвать scala методы как "-" от Java (я предполагаю, что просто должен включать некоторый scala .jar файл в моем пути к классу...?)

8
задан Jason S 11 June 2010 в 18:31
поделиться

2 ответа

Scala записывает эти специальные символы как $ plus, $ minus и т. Д. Вы можете убедиться в этом, запустив javap для scala.collection.immutable.HashSet.

Это позволяет вам делать такой код:

Set s = new HashSet<String>();
s.$plus("one");

Неприятно, и на самом деле он не работает во время выполнения! Вы получаете NoSuchMethodError. Я предполагаю, что это связано с этим обсуждением . Используя обходной путь, который они обсуждают, вы можете заставить все работать:

import scala.collection.generic.Addable;
import scala.collection.generic.Subtractable;
import scala.collection.immutable.HashSet;
import scala.collection.immutable.Set;

public class Test {
    public static void main(String[] args) {
        Set s = new HashSet<String>();
        s = (Set<String>) ((Addable) s).$plus("GAH!");
        s = (Set<String>) ((Addable) s).$plus("YIKES!");
        s = (Set<String>) ((Subtractable) s).$minus("GAH!");
        System.out.println(s); // prints Set(YIKES!)
    }
}

Разве это не красота!?

Я считаю, что Java 7 позволит экранировать напуганные имена методов, так что, возможно, к тому времени вы сможете to do

s = s.#"-"('GAH!')

Чтобы попробовать это, вам понадобится scala-library.jar из папки lib / дистрибутива Scala.

Обновление : исправлен синтаксис Java 7, спасибо Мирко.

8
ответ дан 5 December 2019 в 15:20
поделиться

На основании ответа Адама у меня со Scala 2.7.7 под Eclipse отлично работает следующее:

package com.example.test.scala;

import scala.collection.immutable.HashSet;
import scala.collection.immutable.Set;

public class ImmutableSetTest1 {
    public static void main(String[] args) {
        Set s0 = new HashSet<String>();
        Set[] s = new Set[3];
        s[0] = s0.$plus("GAH!");
        s[1] = s[0].$plus("YIKES!");
        s[2] = s[1].$minus("GAH!");

        for (int i = 0; i < 3; ++i)
            System.out.println("s["+i+"]="+s[i]);
    }
}

, который печатает:

s[0]=Set(GAH!)
s[1]=Set(GAH!, YIKES!)
s[2]=Set(YIKES!)
0
ответ дан 5 December 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: