类对象是否保证在 JVM 中是唯一的,它们是单例吗?即会
getClass() == getClass()
Run Code Online (Sandbox Code Playgroud)
总是成立并且是
a == b
Run Code Online (Sandbox Code Playgroud)
当且仅当为真
a.equals(b)
Run Code Online (Sandbox Code Playgroud)
其中 a 和 b 是类型Class<?>?
我有一个应用程序创建了许多引用其他两个实体的行,即行中有两个实现ManyToOne关系的外键引用.
这些是被引用的两个实体:
CREATE TABLE a (
`id` INT NOT NULL auto_increment,
-- lots of other attributes,
PRIMARY KEY (id)
)
CREATE TABLE b (
`id` INT NOT NULL auto_increment,
-- lots of other attributes,
PRIMARY KEY (id)
)
Run Code Online (Sandbox Code Playgroud)
这是引用a和b的实体:
CREATE TABLE x (
`id` INT NOT NULL auto_increment,
`f_a` INT NOT NULL,
`f_b` INT NOT NULL,
CONSTRAINT `FK_a` FOREIGN KEY (`f_a`) REFERENCES `a` (`id`),
CONSTRAINT `FK_b` FOREIGN KEY (`f_b`) REFERENCES `b` (`id`),
)
Run Code Online (Sandbox Code Playgroud)
a,b和x通过EclipseLink使用JPA映射到A,B和X类,它非常基本,没有任何花哨的东西.
当我在Java中创建一个X时,我会执行以下操作(注意a和b已经存在,我只知道它们的ID - 它们来自遗留应用程序):
A a = …Run Code Online (Sandbox Code Playgroud) 我使用ST-Monad和未装箱的STArrays(STUArray)构建了一个查找矩阵行列式的函数.矩阵的类型如下:
newtype Matrix e = Matrix (Array Int (UArray Int e))
Run Code Online (Sandbox Code Playgroud)
也就是说,一个包含不可变的未装箱数组的不可变数组.这将要求我将谓词添加IArray UArray e到处理的函数中Matrix,而函数又需要FlexibleContexts.好的,完成了.
用于计算行列式的函数具有以下签名:
detST :: (IArray UArray e, MArray (STUArray s) e (ST s),
Num e, Eq e, Division e)
=> Array Int (UArray Int e) -> ST s e
Run Code Online (Sandbox Code Playgroud)
我还需要添加Predicate,MArray (STUArray s) e (ST s)因为内部数组被转换为可变数组(外部装箱,内部未装箱).
这个功能可以像这样使用:
main = do
let m@(Matrix x) = matrix [ [1,-2,3,234]
, [5,2,3,-3]
, [7,18,3,40]
, [2,9,71,0] ]
d = runST (detST x) :: …Run Code Online (Sandbox Code Playgroud) 当我输入
:t map length . sum
Run Code Online (Sandbox Code Playgroud)
进入GHCi,它说类型将是:
map length . sum :: Num [[a]] => [[[a]]] -> [Int]
Run Code Online (Sandbox Code Playgroud)
但是,如果我创建一个type-test.hs包含的文件
x :: Num [[a]] => [[[a]]] -> [Int]
x = map length . sum
Run Code Online (Sandbox Code Playgroud)
ghc和ghci都抱怨:
type-test.hs:1:1:
Non type-variable argument in the constraint: Num [[a]]
(Use -XFlexibleContexts to permit this)
In the type signature for `x': x :: Num [[a]] => [[[a]]] -> [Int]
Run Code Online (Sandbox Code Playgroud)
为什么ghci允许我推断出这种类型(使用:t),什么时候没有启用FlexibleContexts?
我正在做一个有趣的项目,我正在尝试从Java重做一些基本数据类型和概念.目前我正在处理迭代器.
我的方法如下:(1)将接口转换为类型类(2)为实际实现声明自定义数据类型和实例
所以我创建了以下类型类:
class Iterator it where
next :: it e -> (it e, e)
hasNext :: it e -> Bool
class Iterable i where
iterator :: Iterator it => i e -> it e
class Iterable c => Collection c where
add :: c e -> e -> c e
Run Code Online (Sandbox Code Playgroud)
是的,我正在尝试翻译迭代器的概念(在这种情况下,它只是一个围绕实际列表的框).
这是我对一个简单List的实现:
data LinkedList e = Element e (LinkedList e) | Nil
deriving (Show, Eq)
instance Collection LinkedList where
add Nil e = Element e Nil
add (Element x …Run Code Online (Sandbox Code Playgroud) 我发现在gnuplot中,可以从一个文件中获取多个曲线/数据集:
splot "file.dat" using 1:2:3, splot "file.dat" using 1:4:5
Run Code Online (Sandbox Code Playgroud)
也可以将数据嵌入脚本中,如下所示:
splot "-" using 1:2:3
1 0 1
1 2 3
0.5 3 1.5
Run Code Online (Sandbox Code Playgroud)
但是,以下似乎不起作用:
splot "-" using 1:2:3, "-" using 1:4:5
1 0 1 4 4
1 2 3 3 4
0.5 3 1.5 2.5 -1
Run Code Online (Sandbox Code Playgroud)
这是故意的吗,是否存在解决方法?或者根本不可能吗?
我正在使用Haskell的FunctionalDependencies-Extension以及MultiParamTypeClasses.我定义了以下内容:
class Add a b c | a b -> c where
(~+) :: a -> b -> c
(~-) :: a -> b -> c
neg :: a -> a
zero :: a
Run Code Online (Sandbox Code Playgroud)
哪个工作正常(我尝试过Int和Double的实例,最终目标是能够在没有显式转换的情况下添加Int和Doubles).
当我尝试为neg或(〜 - )定义默认实现时,如下所示:
class Add ...
...
neg n = zero ~- n
Run Code Online (Sandbox Code Playgroud)
GHCi(7.0.4)告诉我以下内容:
Ambiguous type variables `a0', `b0', `c0' in the constraint:
(Add a0 b0 c0) arising from a use of `zero'
Probable fix: add a type signature that fixes these type variable(s)
In …Run Code Online (Sandbox Code Playgroud) 考虑以下设计的Java示例:
public class Example {
private final Object value;
private final List<?> aListOfTheseThings;
public <T> Example(final T t, final List<T> aListOfTheseThings) {
this.value = t;
this.aListOfTheseThings = aListOfTheseThings;
}
}
Run Code Online (Sandbox Code Playgroud)
我在这个例子中关心的是:
Example 没有参数化t(这是一个人为的例子,我并不在乎,(2)但我确实关心那里有一个类型参数,这个类参数在类的定义中没有提到).
现在在Scala中我尝试了以下方法:
class Example private[this](
private val value: AnyRef,
private val aListOfTheseThings: List[_]) {
def this[T](t: T, aListOfTheseThings: List[T]) {
this(t, aListOfTheseThings)
}
}
Run Code Online (Sandbox Code Playgroud)
......但这是不可能的.显然,类型参数在构造函数(in this)中无效.
是否有机会将上述Java代码翻译成Scala?
上一堂课
class Foo {
public:
std::shared_ptr<const Bar> quux(const std::string&, std::uint32_t);
}
Run Code Online (Sandbox Code Playgroud)
我可以声明一个std::function具有相同接口的:
std::function<std::shared_ptr<const Bar>(const std::string&, std::uint32_t)> baz = ...
Run Code Online (Sandbox Code Playgroud)
有没有一种压缩该声明的方法,使得to的模板参数std::function是从该方法的声明派生的,例如:
std::function<functype(X::quux)> baz = ...
Run Code Online (Sandbox Code Playgroud)
其中functype是虚C ++操作类似decltype。有没有办法做到这一点/ C ++是否具有这种能力?
我确实看到该方法的签名实际上稍有不同,因为它也需要对该this对象的引用/指针。我也可以派出这样的签名。
我有一个项目,其中有一个第三方工具(通常是从命令行调用)生成的代码。我想将此工具与我们的Maven构建设置保持一致,即,我想调用它,例如之前maven compile。
有没有一种方法可以使用众多的Maven插件之一来执行任意Java程序?我将它插入POM的哪里?
是否有Unicode代码点代表字母,但既不是大写也不是小写?
尤其是对于有其Java的功能特点java.lang.Character.isLetter将返回true,但java.lang.Character.isUpperCase和java.lang.Character.isLowerCase将返回false?
当我有一个std::condition_variable cond和一些bool flag我可以使用谓词等待它:
cond.wait_for(some_lock, std::chrono::milliseconds(100), { return flag; })
Run Code Online (Sandbox Code Playgroud)
现在我想知道:从技术上讲,C++只在C++ 11中得到了一个合适的多线程内存模型,并且flag在多线程上下文中访问变量基本上是未定义的.所以我应该声明它std::atomic<bool>来逃避这种未定义的行为,对吧?
我特别想知道:如果我没有声明它std::atomic,那么我是否会一直读取陈旧的值,flag因为更新永远不会进入主内存?或者这是"理论上是,但实际上从未发生过"的情况?
java ×6
haskell ×4
types ×3
c++11 ×2
arrays ×1
c ×1
c++ ×1
class ×1
constructor ×1
foreign-keys ×1
generics ×1
ghc ×1
ghci ×1
gnuplot ×1
jpa ×1
maven ×1
memory-model ×1
monads ×1
mysql ×1
scala ×1
singleton ×1
sizeof ×1
state ×1
state-monad ×1
std-function ×1
templates ×1
typeclass ×1
unicode ×1