我曾多次尝试在JavaScript中理解OOP,但没有成功。
到目前为止,我读过的所有文章都非常混乱,没有简明地解释JS中的OOP。
作为在JavaScript中理解OOP的最后一次尝试,有人能把下面的代码翻译成JS吗?
public class Base
{
public String firstName; // public scope to simplify
public String lastName; // the same as above
Base(String firstName, String lastName)
{
t
我在试着自己去理解,OCaml语言有哪种形式的多态。
我得到了一个例子
let id x = x
这个示例不是等同于C++模板函数吗
template<class A> A id(A x) { return x; }
如果是这样,那么我的问题是: OCaml中是否还有其他形式的多态性?在命令式语言的世界中,这个概念被称为“通用算法”,而不是“多态性”。
我经常读到关于函数的文章:
fun constantly k a = k
但我不知道怎么处理它。我试过这样做:
val a = constantly 10;
stdIn:32.5-32.28 Warning: type vars not generalized because of
value restriction are instantiated to dummy types (X1,X2,...)
val a = fn : ?.X1 -> int * int -> int
它是这样运作的:
val a = constantly 10 ();
val a : int
以下是布鲁斯·埃克尔的“Thinking in C++”第一卷(第716页,para2)中的几句话:
“多态是一种不能孤立地看待的特性(例如,像const或switch语句),而只能作为类关系的”大图景“的一部分协同工作。人们经常被C++的其他非面向对象的特性所迷惑,比如重载和默认参数,它们有时被表示为面向对象。不要上当受骗;如果它不是后期绑定,它就不是多态。”
我不能清楚地理解这一点,.Does他的意思是没有像编译时多态性这样的东西?
与相关的是,当我将代码与uniplate包一起使用时,我遇到了使代码泛化的问题。我正在处理模块中的数据结构,它们都是带有类型参数l的泛型。这个l在整个树中是相同的。
我正在编写的代码是这样的:
doInt :: Child1 l -> Child1 l
doInt (Child1 l n) = Child1 l (n + 1)
doString :: Child2 l -> Child2 l
doString (Child2 l (_:s)) = Child2 l ('j' : s)
replace :: Data l => Parent l ->
'a和'_l有什么区别?
我看着这个错误,不能理解它:
Error: This expression has type ('a -> float polynomial) list but an expression was expected of type float polynomial list derivlist: ('_l → float polynomial) list
我可以理解为什么dynamic_cast在这种情况下会起作用:
#include <iostream>
struct A{
virtual ~A() = default;
};
struct B {
virtual ~B() = default;
};
struct C : A, B{};
void f(const A &a) {
if(auto p = dynamic_cast<const B*>(&a))
std::cout << "a is a B" << st
我在试着理解为什么下面的一个是标准允许的,而另一个是不允许的。对我来说,除了样板代码之外,它们似乎没有什么不同。我觉得我误解了什么,或者有更好的方法去做。任何帮助都将不胜感激。
不允许:
real :: x
class(*) :: temp
x = 4
temp = genericAssignment(x)
select type(temp)
type is(real)
write(*,*) temp
end select
contains
function genericAssignment(a) result(b)
class(*) :: a
class(
在编码时,我对多态性产生了一个有趣的疑问,我无法理解这个问题的解决方案。
public class Animal {
public void getLegs() {
SOP("4 legs");
}
}
public class Kangaroo extends Animal {
public void getLegs() {
SOP("2 legs");
}
public static void main(String[] args) {
Animal a = new Kangaroo(); // withou