如何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) 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) stereoParameters有两个外在参数:RotationOfCamera2和TranslationOfCamera2.
问题是文档的RotationOfCamera2含义不是很详细,它只是说:Rotation of camera 2 relative to camera 1, specified as a 3-by-3 matrix.
在这种情况下,坐标系是什么?
可以在任何坐标系中指定旋转矩阵.
它究竟是什么意思"相机1的坐标系"?它的x,y,z轴是什么?
换句话说,如果我计算本质矩阵,我怎么能得到相应的RotationOfCamera2和TranslationOfCamera2从本质矩阵?
matlab computer-vision coordinate-systems camera-calibration matlab-cvst
知道如何解决这个问题吗?我该如何调试可能出现的问题?这似乎没有帮助: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) 在响应中,对component(R)的调用setState()可以触发所有子组件的重新呈现.
我们怎么知道什么时候结束了?R在挂载/渲染/更新所有子节点之后调用哪个生命周期方法?
更详细:
让我们考虑以下情况:
有一个根组件R,它的子组件C1和C2.
我想实现我自己的redux存储,其中子组件(C1和C2)可以调度操作,并且在已经挂载/重新渲染/更新所有子节点之后我想命令redux存储来处理调度的操作.
因此,我需要知道所有子项何时被渲染并安排调用redux存储,该存储将命令存储处理已调度的操作.
R在安装/渲染/更新所有子项之后调用哪个生命周期方法?
我一直在阅读这篇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库的安装已经过时.如果您使用此方法,则无法再更新您的个人资料.
什么是在新的代码?旧代码是什么?为什么新代码会破坏什么?
我正在查看这个 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)
加载模块和导出模块有什么区别?
我试图通过使用不相交的联合来模拟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) 我怀疑它是编写它的类的类型,但我不是100%肯定,有人可以确认我的怀疑,并可能提供Java语言规范的参考,其中定义了这种行为?
假设class A有一个在其体内a()使用this关键字的方法,类B扩展了class A.现在class B继承了方法a(),但是,我不确定thisin 的编译时类型B.a()是现在A还是B?
我问这个,因为我想了解访问者模式是如何工作的,因为它是这个罗伯特C.马丁的描述游客章从该原则,模式和敏捷软件开发的实践.
this如果想要完全理解访问者模式,那么知道编译时类型似乎是至关重要的,因为在编译时解析了重载方法调用.更具体而言,我指的编译时间类型this在accept在访问者模式的方法.
我们考虑一下这段代码:
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 ×4
haskell ×2
cabal ×1
compilation ×1
erasure ×1
flowtype ×1
haskell-ng ×1
implicits ×1
java ×1
javascript ×1
matlab ×1
matlab-cvst ×1
matplotlib ×1
nix ×1
pycharm ×1
react-redux ×1
reactjs ×1
redux ×1
type-erasure ×1
type-systems ×1
types ×1
webpack ×1