小编Itt*_*ayD的帖子

scala反射:getDeclaringTrait?

当我研究一个新的库时,我有时会发现很难找到一个方法的实现.

在Java中,Metho#getDeclaringClass提供声明给定方法的类.因此,通过迭代Class#getMethods,我可以找到每个方法,声明它的类.

在Scala中,traits被转换为Java接口,并且扩展trait的类将通过将它们转发到静态定义这些方法的伴随类来实现trait的方法.这意味着,Method#getDeclaringClass将返回类,而不是特征:

scala> trait A { def foo = {println("hi")}}
defined trait A

scala> class B extends A
defined class B

scala> classOf[B].getMethods.find(_.getName() == "foo").get.getDeclaringClass
res3: java.lang.Class[_] = class B
Run Code Online (Sandbox Code Playgroud)

解决这个问题的最佳方法是什么?意思是,给定一个类,我如何得到一个List [(Method,Class)],其中每个元组是一个方法,并且它被声明为trait/class?

reflection scala

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

为什么内联实例创建行为不同?

考虑以下代码:

function Foo() {
}

Foo.prototype.alert = function() {
    alert(this);
}

(new Foo()).alert();
Run Code Online (Sandbox Code Playgroud)

执行时(在jsfiddle中),警报显示'this'是窗口对象.将最后一行更改为:

var foo = new Foo();
foo.alert();
Run Code Online (Sandbox Code Playgroud)

按预期工作.

为什么有区别?

javascript

7
推荐指数
2
解决办法
109
查看次数

Bootstrap 中的窄列

我有一个 2 列网格(实际上,有些行在其他 5 列网格中有 2 列)。我试图使第一个尽可能窄,并将其余的长度留给另一个。嵌套不起作用,因为我只有 2 列。

基本上,我想要类似col-xs-0.5或更好的解决方案,该解决方案将使第一列足够宽以适合*

这是一个例子:https : //jsfiddle.net/4jcL24ze/8/

<div class="container">
   <div class="row">
       <div class="col-xs-1">*</div>
       <div class="col-xs-11">some long description</div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

css twitter-bootstrap

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

Scala:定义'java'可以使用的主要方法

Scala中定义main的常用方法(如下所示)可用于运行带有'scala'的类,但不能运行'java'(因为创建的方法不是静态的).如何编写可以用'java'执行的Scala类/对象?

object HelloWorld {
  def main(args: Array[String]) {
    println("Hello, world!")
  }
}
Run Code Online (Sandbox Code Playgroud)

scala

6
推荐指数
2
解决办法
6159
查看次数

斯卡拉:建议进行实际操作

我想提供一个Scala演示文稿,我希望通过获取一个应用程序并将其从使用java成语的东西演变为使用scala(特征,模式匹配,隐式转换,函数编程)的东西.

我特别感兴趣的是能够展示设计变化的东西,而不是语法糖.最终scala代码显然更容易维护和扩展的东西.

那么任何想法?(我不是要求代码示例,而是要求使用什么示例和可以演示哪些设计原则的粗略想法).

functional-programming scala

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

Scala:如何将varargs指定为类型?

代替

def foo(configuration: (String, String)*)
Run Code Online (Sandbox Code Playgroud)

我想能够写:

type Configuration =  (String, String)*
def foo(configuration: Configuration)
Run Code Online (Sandbox Code Playgroud)

主要用例是在覆盖子类时提供简单的方法签名

更新:我可以靠近

type Param = (String, String)
def foo(configuration: Param*)
Run Code Online (Sandbox Code Playgroud)

但有没有办法做得更好?

types scala

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

最好的scala成语,用于查找和返回

这是我经常遇到的事情,但我不知道这种优雅的做法.我有一个Foo对象的集合.Foo有一个方法bar()可以返回null或Bar对象.我想扫描集合,调用每个对象的bar()方法,并在第一个返回实际引用时停止并从扫描返回该引用.

明显:

foos.find(_.bar!= null).bar

诀窍,但两次调用#bar.

scala scala-collections

6
推荐指数
2
解决办法
875
查看次数

了解企业应用程序上下文中的FP(在Scala中)

我看到的大多数示例(如果不是全部)都是一种执行某种计算和完成的函数.在这方面,FP闪耀.但是,我很难看到如何在企业应用程序环境的上下文中应用它,在这种情况下,没有太多的算法进行,并且有大量的数据传输和服务.

所以我想问一下如何在FP风格中实现以下问题.

我想实现一个事件总线服务.该服务具有register注册侦听器和publish发布事件的方法.

在OO设置中,这是通过使用两种方法创建EventBus接口来完成的.然后,实现可以使用列表来保存由其更新register和使用的侦听器publish.当然这种方法register有副作用.Spring可用于创建类并将其实例传递给事件的发布者或订阅者.

考虑到事件总线服务的客户端是独立的(例如,并非所有客户端都是以"测试"方法创建的),如何在FP中对此进行建模?据我所知,这否定了使寄存器返回EventBus的新实例,因为其他客户端已经拥有对旧实例的引用(例如,发布到它只会发布到它知道的侦听器)

我更喜欢在Scala中使用解决方案.

functional-programming scala

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

更简洁的替代breakOut

breakOut很好,但是太冗长了:

List(1, 2, 3).map{i => (i * 2, i / 2.0, i.toString)}(breakOut) : Array[(Int, Double, String)]
Run Code Online (Sandbox Code Playgroud)

我不想指定元素类型.我想要的东西:

 List(1, 2, 3).map{i => (i * 2, i / 2.0, i.toString)}(build[Array])
Run Code Online (Sandbox Code Playgroud)

我可以buildArray轻松地编写,但后来我需要一个buildSet,buildList等.所以我想要一些通用的东西.

额外点(;-))如果你可以使它适用于Map(使用相同的名称build,而不是build2或buildMap)

scala

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

如何处理非英语键按下

当我将键盘布局切换为希伯来语并按下一个字符时,它会在按键事件中按原样接收.例如,单击?(v键),然后e.which是1492.但是,当我进行组合时,键是英语键.所以对于alt+? e.which是86.所以事件看起来像alt+v

这是一个痛苦,如果我想创建一个接受组合键和回调,并注册一个回调函数,但也显示了回调的文件,因为如果我注册alt+?,然后当我按下组合它看起来像alt+v,它不会匹配注册的组合.但是,如果我注册alt+v,那么文档将是尴尬的.

所以我的问题归结为以下是否有可能:

  1. 知道实际上哪个键被按下(意思是,知道?用压在一起alt而不是v)
  2. 希伯来字符(或任何非英语)与其物理英语对应物之间的映射,所以当我的函数收到alt+?它时会将其转换alt+v为回调查找.

当然,我想要一些通用的东西,它适用于任何语言,而不仅仅是希伯来字母.

javascript internationalization

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