小编reg*_*exp的帖子

设置和输入推断

有人可以解释为什么以下不起作用.当我这样做时toSet,不知何故失去了编译类型推断的一些信息,但我不明白为什么.

scala> case class Foo(id: Int, name: String)
defined class Foo

scala> val ids = List(1,2,3)
ids: List[Int] = List(1, 2, 3)

scala> ids.toSet.map(Foo(_, "bar"))
<console>:11: error: missing parameter type for expanded function ((x$1) => Foo(x$1, "bar"))
              ids.toSet.map(Foo(_, "bar"))
                                ^

scala> ids.map(Foo(_, "bar")).toSet
res1: scala.collection.immutable.Set[Foo] = Set(Foo(1,bar), Foo(2,bar), Foo(3,bar))
Run Code Online (Sandbox Code Playgroud)

scala

10
推荐指数
1
解决办法
533
查看次数

为什么在使用后在单独的特征中定义的implicits会导致编译错误?

为什么以下代码会导致编译错误:

class MyImplicit

class FooTest extends ImplicitProvider {

  def getImplicit(implicit i: MyImplicit) = i

  getImplicit
}

trait ImplicitProvider {
  implicit val myImplicit = new MyImplicit
}
Run Code Online (Sandbox Code Playgroud)

编译错误是:

could not find implicit value for parameter i: MyImplicit getImplicit
Run Code Online (Sandbox Code Playgroud)

如果我将特性ImplicitProvider移动到类FooTest之上,一切正常.

我用scala 2.11.7和sbt 0.13.9编译.

这是预期的行为还是一个错误?

scala sbt

8
推荐指数
1
解决办法
69
查看次数

Scala Library Apple推送通知服务

我正在搜索图书馆从Scala发送Apple推送通知.

有没有人对使用Scala编写的库有任何经验?

或者是javaPNS(https://code.google.com/p/javapns/)最好选择?

scala apple-push-notifications

7
推荐指数
0
解决办法
680
查看次数

Objective-C为对象的每个方法添加功能

我想为objective-c中的对象构建一个小插件系统.

现在我陷入了我想要动态地(在运行时)为对象中的每个可用功能添加一行代码的地步.

我已经玩过运行时库,但还没有找到解决方案.

到目前为止我尝试过的是:

        id (^impyBlock)(id, id, ... ) = ^(id self_, id arguments, ...)
        {
            // My custom code for every function here
            id (*func)(__strong id,SEL,...) = (id (*)(__strong id, SEL, ...))imp;
            return func(obj, s, arguments);

        };

        id (*impyFunct)(id, SEL,...) = imp_implementationWithBlock(impyBlock);
        method_setImplementation(mList[i], impyFunct);
Run Code Online (Sandbox Code Playgroud)

我的问题是,当有多个参数时,我没有机会将它们传递给"func()".AFAIK这在C中是不可能的.

我想到的另一个解决方案是通过方法调配来做一些魔术.

步骤:

  1. 创建一个"swizzle方法",它只调用我的自定义代码并在之后调用原始方法(通过命名方案)
  2. 使用"swizzle Method"之一更改每个函数的IMP
  3. 使用"旧"实现创建一个新方法,并将名称更改为类似"___name"的模式

在这个解决方案中,我陷入了第3点.我还没有设法动态创建一个完整的新方法.

有没有人可以帮助我解决上面的问题,或者有一个"捕获所有方法功能"的另一个解决方案.

最好的是类似forwardInvocation,它也捕获已经定义的函数.

谢谢你的帮助!

cocoa objective-c ios

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

给出所有参数时如何不应用函数

提供以下方案:

def add(a: Int, b: Int): Int = a + b
def f1(adder: () => Int) = adder()

f1(add(1,2) _) // Does **NOT** compile, because add seems to be already executed
f1(() => add(1,2)) // This works, but seems to be ugly
Run Code Online (Sandbox Code Playgroud)

有没有办法让它与下划线一起使用?

scala

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

Scala使用字符串按名称设置函数参数

是否可以通过名称用字符串设置函数的参数.

例如:

给定:

def foo(a: String, b: String)
Run Code Online (Sandbox Code Playgroud)

我可以使用Map来动态调用此函数吗?

Map(("a", "bla"), ("b", "blub"))
Run Code Online (Sandbox Code Playgroud)

如果是这样,怎么样?

谢谢!

scala

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

将java.util.Collections.synchronizedList与Scala的.asScala转换器一起使用

JavaDoc java.util.Collections.synchronizedList说如下

当迭代它时,用户必须手动同步返回的列表:

List list = Collections.synchronizedList(new ArrayList());
...
synchronized (list) {
  Iterator i = list.iterator(); // Must be in synchronized block
    while (i.hasNext())
      foo(i.next());
}
Run Code Online (Sandbox Code Playgroud)

不遵循此建议可能会导致非确定性行为.

现在我想知道当我使用它上面的.asScala函数时会发生什么.scala.collection.JavaConverters.map

转换器会在迭代期间处理同步还是我必须自己完成?

java scala

0
推荐指数
1
解决办法
282
查看次数

标签 统计

scala ×6

apple-push-notifications ×1

cocoa ×1

ios ×1

java ×1

objective-c ×1

sbt ×1