小编jhe*_*dus的帖子

Scala Puzzle:强制执行两个函数参数的类型相同,并且都是给定类的子类型

如何trickyMethod在编译时强制执行的参数是相同的,但同时也有共同的超类型Fruit

所以换句话说,tricky.trickyMethod(new Banana,new Apple)不应该编译.

我相信必须有一个简单的解决方案,但我只花了1个小时寻找答案,但仍然不知道:(

我用<:<尝试了隐含的证据,但我无法让它工作.

class Fruit
class Apple extends Fruit
class Banana extends Fruit

class TrickyClass[T<:Fruit]{
  def trickyMethod(p1:T,p2:T)= println("I am tricky to solve!")
}

object TypeInferenceQuestion extends App{
  val tricky=new TrickyClass[Fruit]()
  tricky.trickyMethod(new Apple,new Apple) //this should be OK
  tricky.trickyMethod(new Banana,new Banana) //this should be OK
  tricky.trickyMethod(new Banana,new Apple) //this should NOT compile

}
Run Code Online (Sandbox Code Playgroud)

编辑:

谢谢你的答案!

跟进(更一般)问题:

第二个例子是第一个例子的更一般情况.

class Fruit

class Apple extends Fruit
class Banana extends Fruit

class TrickyClass[T]{
  def trickyMethod[S<:T](p1:S,p2:S)= println("I …
Run Code Online (Sandbox Code Playgroud)

types type-systems scala type-inference compilation

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

Scala与Haskell中List [T]和Set [T]上的模式匹配:类型擦除的效果

Haskell相当于下面的代码会产生正确的答案吗?

可以修复此Scala代码以生成正确的答案吗?如果有,怎么样?

object TypeErasurePatternMatchQuestion extends App {
  val li=List(1,2,3)
  val ls=List("1","2","3")
  val si=Set(1,2,3)
  val ss=Set("1","2","3")
  def whatIsIt(o:Any)=o match{
    case o:List[Int]    => "List[Int]"
    case o:List[String] => "List[String]"
    case o:Set[Int]     => "Set[Int]"
    case o:Set[String]     => "Set[String]"
  }

  println(whatIsIt(li))
  println(whatIsIt(ls))
  println(whatIsIt(si))
  println(whatIsIt(ss))

}
Run Code Online (Sandbox Code Playgroud)

打印:

List[Int]
List[Int]
Set[Int]
Set[Int]
Run Code Online (Sandbox Code Playgroud)

但我希望它能打印出来:

List[Int]
List[String]
Set[Int]
Set[String]
Run Code Online (Sandbox Code Playgroud)

haskell scala pattern-matching type-erasure erasure

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

在Matlab中创建stereoParameters类:相对摄像机旋转参数应该使用什么坐标系?

stereoParameters有两个外在参数:RotationOfCamera2TranslationOfCamera2.

问题是文档的RotationOfCamera2含义不是很详细,它只是说:Rotation of camera 2 relative to camera 1, specified as a 3-by-3 matrix.

在这种情况下,坐标系是什么?

可以在任何坐标系中指定旋转矩阵.

它究竟是什么意思"相机1的坐标系"?它的x,y,z轴是什么?

换句话说,如果我计算本质矩阵,我怎么能得到相应的RotationOfCamera2TranslationOfCamera2从本质矩阵?

matlab computer-vision coordinate-systems camera-calibration matlab-cvst

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

在OSX上的PyCharm中,matplotlib支持失败

知道如何解决这个问题吗?我该如何调试可能出现的问题?这似乎没有帮助:https://youtrack.jetbrains.com/issue/PY-15520

我在控制台中得到这个:

Python 2.6.9 (unknown, Jul 14 2015, 19:46:31) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
>>> import matplotlib.pyplot as plt
Matplotlib support failed
Run Code Online (Sandbox Code Playgroud)

后端是:

>>> import matplotlib
>>> print(matplotlib.rcParams['backend'])
MacOSX
Run Code Online (Sandbox Code Playgroud)

matplotlib pycharm

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

React:我们怎么知道在setState()之后已经挂载/渲染了所有组件?

在响应中,对component(R)的调用setState()可以触发所有子组件的重新呈现.

我们怎么知道什么时候结束了?R在挂载/渲染/更新所有子节点之后调用哪个生命周期方法?

更详细:

让我们考虑以下情况:

有一个根组件R,它的子组件C1C2.

我想实现我自己的redux存储,其中子组件(C1C2)可以调度操作,并且在已经挂载/重新渲染/更新所有子节点之后我想命令redux存储来处理调度的操作.

因此,我需要知道所有子项何时被渲染并安排调用redux存储,该存储将命令存储处理已调度的操作.

R在安装/渲染/更新所有子项之后调用哪个生命周期方法?

reactjs redux react-redux

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

什么是haskellng?'haskellPackages'和'haskellngPackages'有什么区别?

我一直在阅读这篇StackOverflow文章,建议我们使用haskellng软件包.

我也读过这个,但我不明白是什么haskellng.

我也读过这个,但我还是不知道是什么haskellng.

有人haskellng可以用简单明了的方式解释一下是什么吗?

为什么haskellng重要?它为什么好?

我明白这haskellng正在取代某些东西.但它取代了什么呢?为什么需要更换某些东西?

这篇文章中写道:

如果我不想,我永远不会更新?

我的猜测是'haskellPackages'和'haskellngPackages'会共存一段时间.就个人而言,我转而使用Haskell NG,而且我不再维护旧层次结构中的任何包.我想其他贡献者会做同样的事情.一旦你将你的设置转换为'haskellngPackages',就没有理由回头看,真的.

'haskellPackages'和'haskellngPackages'有什么区别?

什么是'haskellPackages'?它从何而来 ?它是干什么用的 ?

他们也在一篇文章中写道:

我为什么要关心这个"新基础设施"?

新代码将破坏您在〜/ .nixpkgs/config.nix或/etc/nixos/configuration.nix中可能具有的任何Haskell相关配置的评估.

私有生成的cabal2nix表达式将停止编译.

依赖于ghc-wrapper在〜/ .nix-profile中自动查找GHC库的安装已经过时.如果您使用此方法,则无法再更新您的个人资料.

什么是新的代码?旧代码是什么?为什么新代码会破坏什么?

haskell cabal cabal-install nix haskell-ng

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

webpack:多个入口点

我正在查看这个 webpack配置文件,我不太明白如果给出了多个入口点会发生什么(如下例所示).

是否这样入口点作为依赖搜索的起点,然后结果依赖关系的并集最终是在捆绑中?

'use strict';

var webpack = require('webpack');

module.exports = {

    entry: [
        'webpack/hot/only-dev-server',
        './index.js'
    ],
    output: {
        path: __dirname + '/build',
        publicPath: __dirname  + "/build/",
        filename: 'bundle.js'
    },
    plugins: [
        new webpack.HotModuleReplacementPlugin(),
        new webpack.NoErrorsPlugin()
    ]


};
Run Code Online (Sandbox Code Playgroud)

我查看了文档,但它没有解释上面的配置做了什么.

此外, 这里写道:

如果传递数组:启动时加载所有模块.最后一个是导出的.

entry: ["./entry1", "./entry2"]
Run Code Online (Sandbox Code Playgroud)

加载模块和导出模块有什么区别?

webpack

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

密封的案例类流程

我试图通过使用不相交的联合来模拟Scala 在Flow中的密封案例类:

type ADD_TODO = {
  type:'ADD_TODO',
  text:string,
  id:number
}

type TOGGLE_TODO = {type:'TOGGLE_TODO', id:number }

type TodoActionTy = ADD_TODO | TOGGLE_TODO


const todo = (todo:TodoTy, action:TodoActionTy) => {
  switch (action.type){
      case 'ADD_TODO' :
          return { id:action.id, text:action.text, completed: false};
      case 'TOGGGGLE_TODO': // this should give a type error 
        if (todo.id !== action.id) {return todo;}
          return {...todo, completed:!todo.completed};
  }
}
Run Code Online (Sandbox Code Playgroud)

我应该得到一个类型错误,case 'TOGGGGLE_TODO':但我没有.

有办法解决这个问题吗?

编辑:

我在这里粘贴Gabriele的评论中的代码,用于未来证明:

type TodoTy = {};

type ADD_TODO = { type: …
Run Code Online (Sandbox Code Playgroud)

javascript scala flowtype

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

这个的编译时间类型是什么?(在Java中)

我怀疑它是编写它的类的类型,但我不是100%肯定,有人可以确认我的怀疑,并可能提供Java语言规范的参考,其中定义了这种行为?

假设class A有一个在其体内a()使用this关键字的方法,类B扩展了class A.现在class B继承了方法a(),但是,我不确定thisin 的编译时类型B.a()是现在A还是B

我问这个,因为我想了解访问者模式是如何工作的,因为它是这个罗伯特C.马丁的描述游客章该原则,模式和敏捷软件开发的实践.

this如果想要完全理解访问者模式,那么知道编译时类型似乎是至关重要的,因为在编译时解析了重载方法调用.更具体而言,我指的编译时间类型thisaccept在访问者模式的方法.

java design-patterns

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

为什么我们必须显式导入具有来自伴随对象的隐式参数的隐式转换?奇怪.

我们考虑一下这段代码:

class A
object A{
  implicit def A2Int(implicit a:A)=1
  implicit def A2String(a:A)="Hello"
}

object Run extends App{
  implicit val a: A =new A

  import A.A2Int
  // without this import this code does not compile, why ?
  // why is no import needed for A2String then ?

  def iWantInt(implicit i:Int)=println(i)
  def iWantString(implicit s:String)=println(s)

  iWantInt
  iWantString(a)
}
Run Code Online (Sandbox Code Playgroud)

它运行和打印:

1
Hello
Run Code Online (Sandbox Code Playgroud)

现在,如果我们注释掉这条线

import A.A2Int
Run Code Online (Sandbox Code Playgroud)

然后我们得到一个编译错误:

在此输入图像描述

随着该系列的注释,为什么Scala无法找到A.A2String它是否能找到A.A2Int

如何解决这个问题?

谢谢阅读.

scala implicit-conversion implicits companion-object

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