标签: dynamic-typing

是否定义了更改Objective-C对象isa的行为?

在Objective-C中,您可以通过分配对象的isa成员变量来在运行时更改对象的动态类型:

id object = ...;
object->isa = [SomeClass class];
Run Code Online (Sandbox Code Playgroud)

这是未定义的行为吗?我现在正在做这个作为其他东西的kludge,它似乎工作,但我觉得这样做很脏.我设置的新类没有添加任何成员变量,它只是覆盖一个方法并添加一个新方法,因此类大小是相同的.我觉得如果我改变了对象大小,会导致很多不好.

objective-c dynamic-typing

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

C++相当于C#4.0的"动态"关键字?

在C#4.0中,您可以使用"dynamic"关键字作为占位符,直到运行时才知道该类型.在某些极端情况下,这是非常有用的行为.是否有可能在C++中模拟这样的事情,可能使用C++ 0x功能或RTTI?

c++ dynamic dynamic-typing c++11

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

Ioc容器和动态语言(取2)

我一直在阅读依赖注入,控制反转和IoC容器.我还主要使用动态语言编程(PHP在工作,Python在家).以下是我找到的东西,但是当我把它拼凑在一起时,这给我留下了很多空白:

所以我读到的是:IoC容器在静态语言中是一个更大的交易,因为在动态语言中执行DI要容易得多.但是它们还提供了远远超出DI的好处,比如为您管理依赖项,并使您不必手动将十几个对象串联起来.顺便说一句,它们很复杂,所以不要自己尝试(但PHP没有好的).

我觉得这些信息让我有点......卡住了.我该怎么办?我在一个非常大的代码库中工作,具有非常复杂的依赖(并且可能强烈需要重构,但这是另一个并行问题).到目前为止,我们在实施DI方面做得很差,我真的想让我们朝着正确的方向前进.关于动态语言和IoC(或至少IoC容器)似乎没有什么.

我最好暂时将"依赖于手工"的依赖关系放在一起,并且在我更好地处理这些原则之后,担心稍后在容器中自动化它?是否值得实现我自己的简单IoC容器?或者最终是不值得PHP的成本?

php dependency-injection ioc-container dynamic-typing

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

Java注释动态类型转换

我有2个java注释类型,让我们说XA和YA.两者都有一些方法().我解析源代码并检索Annotation对象.现在我想动态地将注释转换为它的真实类型,以便能够调用方法().没有instanceof声明怎么办呢?我真的想避免像开关一样的源.我需要这样的东西:

Annotation annotation = getAnnotation(); // I recieve the Annotation object here
String annotationType = annotation.annotationType().getName();

?_? myAnnotation = (Class.forName(annotationType)) annotation;
annotation.method(); // this is what I need, get the method() called
Run Code Online (Sandbox Code Playgroud)

?_?意味着我不知道什么是myAnnotation类型.我不能将基类用于我的XA和YA注释,因为不允许在注释中继承.或者有可能以某种方式做?

感谢您的任何建议或帮助.

java annotations casting dynamic-typing

5
推荐指数
2
解决办法
4111
查看次数

参数isKindOfClass:[NSNumber class] - 理智的方式检查这个?

所以我玩的是arg的类类型在运行时未知的东西.像这样:

- (NSNumber *)doWhatever:(id)arg
{
    // this ALWAYS FAILS
    if ([arg isKindOfClass:[NSNumber class]]) {
        return arg;
    }
    else {
        // what was it???
        NSLog("arg klass=%@", [arg class]);  // prints NSCFNumber
    }

    // This check works correctly.
    if ([arg isKindOfClass:[NSArray class]]) {
        for (id x in arg) {
            NSNumber *result = [self doWhatever:x];
            if (result) {
                return result;
            }
        }
    }
    return nil;
}

- (void)someMethod
{
    NSArray *myArray = [NSArray arrayFromObjects:[NSNumber numberWithInt:3], nil]];
    NSNumber *myNum = [self doWhatever:myArray];
    NSLog(@"myNum=%@", myNum); …
Run Code Online (Sandbox Code Playgroud)

types objective-c objective-c-runtime dynamic-typing nsnumber

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

Matlab:为什么'1'+ 1 == 50?

Matlab的动态类型很弱,这就是造成这种奇怪行为的原因.我不明白的是究竟发生了什么,因为这个结果让我感到惊讶.

编辑:为了澄清,我所描述的显然是Matlab以ASCII格式存储字符的结果,这也在评论中提到.我对Matlab处理变量的方式更感兴趣,特别是它如何以及何时为值分配类型/标记.

谢谢.


'1' 
Run Code Online (Sandbox Code Playgroud)

是matlab中的1乘1字符矩阵

'123' 
Run Code Online (Sandbox Code Playgroud)

是一个1乘3的字符矩阵.

正如所料,

1
Run Code Online (Sandbox Code Playgroud)

返回一个1乘1.


现在,如果我进入

'1' + 1
Run Code Online (Sandbox Code Playgroud)

我得到50作为1对1的双倍,如果我进入

'123' + 1
Run Code Online (Sandbox Code Playgroud)

我得到1比3的双倍

[ 50 51 52 ]
Run Code Online (Sandbox Code Playgroud)

此外,如果我输入

'a' + 1
Run Code Online (Sandbox Code Playgroud)

结果是

98
Run Code Online (Sandbox Code Playgroud)

以1比1的双倍.

我假设这与matlab如何以ascii形式存储char变量有关,但它究竟是如何处理这些?数据是否实际上是统一的和标记的,或者它是如何工作的?

谢谢.

matlab type-systems dynamic-typing

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

IO Monad采用动态类型语言

在Haskell中,我觉得非常漂亮的一件事是它使用Monads作为有效行为的抽象.它创建了一种非常优雅的方式来表达命令式代码,同时还允许强大的事情发生并保证正确性.

IO monad似乎并不特定于强类型语言.具体来说,在我看来,用动态类型语言实现IO monad并不困难或没有革命性.然后,只需要限制语言,以便所有IO操作只是在IO monad中生成动作.

话虽这么说,我还没有看到任何动态类型的语言(也许我只是看起来不够努力),但使用monads隔离副作用.是否有这种情况的原因?(或它们存在吗?)

monads haskell functional-programming dynamic-typing

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

当使用多态时,如何让PHP代码知道传递给它的特定类子类型?

我有一个名为Assembly隐藏底层产品实现的类. ProductA可以有一套吸气剂,ProductB可以有另一套吸气剂.

虽然PHP非常宽容,如果我不混淆产品和吸气剂,我的代码会起作用,但是当我搞砸并填充AssemblyProductA,没有提供保护,但是后来使用了getter ProductB.

此外,我的IDE确实知道来自任何一个类的方法,因此当我Assembly使用其中任何一个的getter 工作时,没有提供自动完成Product.

我想要更多的防弹代码,一个Assembly 知道知道Product它当前托管哪个子类型的代码.有办法吗?

以下示例

class Assembly
{
    private $product;

    public function setProduct(Product $product) {
        $this->product = $product;
    }

    public function getA() {
        return $this->product->getA();
    }

    public function getB() {
        return $this->product->getB();
    }
}

class Product { }

class ProductA extends Product
{
    public function getA() {
        return "A";
    }
}

class ProductB extends Product
{
    public …
Run Code Online (Sandbox Code Playgroud)

php oop polymorphism dynamic-typing

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

在 PHP 中进行类型检查的更快方法是什么?gettype() 或多个 is_*()

在动态类型的 PHP 中,我们可以创建可以接受多种数据类型作为参数的函数。然后我们可以根据变量的类型对数据进行操作。有两种方法可以做到这一点:

方法一

function doSomething1($param) {
    $type = gettype($param);
    if ($type === 'string') {
        // do something
    }
    else if ($type === 'integer') {
        // do something
    }
    else if ($type === 'array') {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)

方法二

function doSomething2($param) {
    if (is_string($param)) {
        // do something
    }
    else if (is_int($param)) {
        // do something
    }
    else if (is_array($param)) {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 据我所知,从测试的角度来看,这两种方法在功能上是等效的,但是由于 PHP 有很多问题,我不得不问,如果我偏爱一种方法而不是另一种方法,我是否会错过什么?

  2. 从性能的角度来看,因为PHP 函数调用很昂贵,所以说一种方法比两种方法快是正确的吗?或者是gettype()比单个is_*() …

php performance types dynamic-typing

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

我什么时候应该在Python中使用类型检查(如果有的话)?

我开始学习Python,作为主要的Java开发人员,我遇到的最大问题是何时何时不使用类型检查.大多数人似乎都在说Python代码不需要进行类型检查,但是在我认为有必要时会有很多情况.例如,假设我需要使用方法参数来执行算术运算,为什么我不确定参数是数值数据类型?

此问题不仅限于功能.对于类变量,我也会遇到同样的思考过程.我应该或不应该使用属性(使用@property)来检查类型而不是定期实现的类变量?

这是一种为我开展发展的新方式,所以我很感激帮助理解.

python dynamic-typing

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