如何检查objectA是否在smalltalk中将所有消息都作为objectB?

时间:2015-06-22 18:40:22

标签: smalltalk squeak gnu-smalltalk

我正在使用smalltalk - 我需要检查objectA是否包含objectB所拥有的所有消息(方法)。

我需要编写自己的代码,怎么办呢?

2 个答案:

答案 0 :(得分:2)

例如,您可以向对象的类询问哪些选择器的实例理解:

#include <iostream>

//Base data structure to encapsulate only data.
struct data {
    data(int i) : i(i) {}

    int i;   
};

//Wrapper around our data structure, with interfaces to access
//the values and the data; implement your own constructor to
//gate the value
class PrimeInt {
public:
    PrimeInt(const int i)
    : d(i) {}

    PrimeInt(const data& other)
    : d(other) {}

    PrimeInt(data&& other)
    : d(std::move(other)) {}

    PrimeInt& operator=(const PrimeInt&) = default;
    PrimeInt& operator=(PrimeInt&&) = default;

    int get() {return d.i;};

    operator data() {return d;};

private:
    data d;
};

//Wrapper around our data structure, with interfaces to access
//the values and the data; implement your own constructor to
//gate the value
class OddInt {
public:
    OddInt(const int i)
    : d(i) {}

    OddInt(const data& other)
    : d(other) {}

    OddInt(data&& other)
    : d(std::move(other)) {}

    OddInt& operator=(const OddInt&) = default;
    OddInt& operator=(OddInt&&) = default;

    int get() {return d.i;};

    operator data() {return d;};

private:
    data d;
};

//Notice that we can now implicitly cast from one type to another.
int main() {
    PrimeInt pi(10);

    std::cout << pi.get() << std::endl;

    OddInt oi(pi);

    std::cout << oi.get() << std::endl;

    return 0;
}

然后你可以问不同的对象并比较结果。

答案 1 :(得分:2)

解决方案可能是

objectA class allSelectors includesAll: objectB class allSelectors