标签: dynamic-typing

动态类型语言中地图/列表的变量命名约定

我正在使用Groovy语言,它具有动态类型(以及可选的静态类型).它还具有对列表,地图和范围的本机支持,因此我发现自己使用列表和地图很多,尤其是列表列表,地图列表,列表地图等.

在静态语言(尤其是泛型)中,您始终可以了解您的类型.我对动态语言相当新,而且跟踪我的变量应该是什么有点困难,所以我想知道其他人是否使用某种变量命名约定来保持这些.

例如,假设我有一个日期为键的映射,而整数为值.或整数列表,或包含字符串作为键和帐户对象作为值的映射列表.

似乎在变量名后面创建一个明确的约定将帮助我跟踪我正在处理的数据类型结构,而不必查找它.

有小费吗?

language-agnostic variables groovy naming-conventions dynamic-typing

10
推荐指数
2
解决办法
2953
查看次数

在Haxe中从字符串名称创建类的实例

假设我获得了我作为一个类的名称String.如何使用该字符串中包含的名称实例化该类?我知道它将来自某个父类,但实际的类会有所不同.

haxe instantiation dynamic-typing

8
推荐指数
1
解决办法
3265
查看次数

从Any到Dynamic的隐式转换

以下为什么不工作?(是的,我正在使用2.9.0final并打开" -Xexperimental "选项.)

implicit def any2Dynamic(a: Any) = new Dynamic {
  def applyDynamic(name: String)(args: Any*) = {
    println(a + name)
  }
}

"Say".hello // value hello is not a member of java.lang.String
Run Code Online (Sandbox Code Playgroud)

人们可以争论这是多么有意义......如果这将按预期工作,优先权将发生在"Say".toInt:StringLike.toInt(new Dynamic {...}).applyDynamic("toInt")

scala dynamic-typing

8
推荐指数
1
解决办法
408
查看次数

在D中使用动态类型,这是一种静态类型语言

当我遇到一个有趣的问题时,我正在为D实现一个动态类型库.

现在,我成功地创建了一个函数dynamic(),该函数返回一个对象的动态版本.

例如:

import std.stdio, std.dynamic.core;

class Foo
{
    string bar(string a) { return a ~ "OMG"; }
    int opUnary(string s)() if (s == "-") { return 0; }
}

void main(string[] argv)
{
    Dynamic d = dynamic(new Foo());
    Dynamic result = d.bar("hi");
    writeln(result);  // Uh-oh
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是writeln尝试使用编译时反射来弄清楚如何对待result.

它尝试的第一件事是什么? isInputRange!(typeof(result))

麻烦的是,它返回真实!为什么?因为我必须假设它所需要的所有成员都存在,除非我能在运行时证明这一点 - 这为时已晚.因此,该程序试图调用front,popFront以及emptyresult,撞毁我的程序.

我想不出办法解决这个问题.有没有人有想法?

d dynamic-typing

8
推荐指数
1
解决办法
525
查看次数

在给定指向其基类的指针的情况下识别子类?

假设我有一个抽象基类Parent和子类Child1和Child2.如果我有一个函数,接受家长*,是有办法(或许与RTTI?)在运行时,以确定它是否是一个Child1*或*CHILD2的功能实际收到?

到目前为止,我在RTTI的经验是,当foo是Parent*时,typeid(foo)返回typeid(Parent*),而不管foo是其成员的子类.

c++ dynamic-typing

8
推荐指数
2
解决办法
2347
查看次数

C#中的动态类型

我知道这不起作用,但有没有人有办法使它工作?

object obj = new object();
MyType typObj = new MyType();
obj = typObj;
Type objType = typObj.GetType();
List<objType> list = new List<objType>();
list.add((objType) obj);
Run Code Online (Sandbox Code Playgroud)

编辑:

这是当前的代码:http://github.com/vimae/Nisme/blob/4aa18943214a7fd4ec6585384d167b10f0f81029/Lala.API/XmlParser.cs

我试图简化的方法是SingleNodeCollection

正如您所看到的,它目前使用了如此混乱的反射方法.

c# dynamic-typing

7
推荐指数
1
解决办法
5911
查看次数

没有鸭子打字的动态打字?

我习惯于动态类型,这意味着在运行时检查对象/非面向对象结构的类型信息并抛出某种类型的错误,即如果它像鸭子那样呱呱叫它.是否有不同类型的动态类型(请详细说明).

duck-typing dynamic-typing

7
推荐指数
2
解决办法
965
查看次数

Java在运行时使用参数实例化类

我正在使用一个抽象工厂来返回具体子类的实例.我想在给定具体类名的String的情况下在运行时实例化子类.我还需要将参数传递给构造函数.类结构如下:

abstract class Parent {

  private static HashMap<String, Child> instances = new HashMap<String,Child>()

  private Object constructorParameter;  

  public static Child factory(String childName, Object constructorParam){

     if(instances.keyExists(childName)){
       return instances.get(childName);
     }

     //Some code here to instantiate the Child using constructorParam, 
     //then save Child into the HashMap, and then return the Child.
     //Currently, I am doing:
     Child instance = (Child) Class.forName(childClass).getConstructor().newInstance(new Object[] {constructorParam});
     instances.put(childName, instance);
     return instance;
  }

  //Constructor is protected so unrelated classes can't instantiate
  protected Parent(Object param){ 
    constructorParameter = param;
  }

}//end Parent …
Run Code Online (Sandbox Code Playgroud)

java dynamic-typing abstract-factory

7
推荐指数
2
解决办法
1万
查看次数

将动态转换为对象

这是我的代码:

MyClass here = new MyClass();
IEnumerable<MyClass> vats = (IEnumerable<MyClass>)here.All();
Run Code Online (Sandbox Code Playgroud)

All()方法返回IEnumerable <dynamic>.我想将其转换为IEnumerable <MyClass>.上面的行没有工作,它说无法将'd__15'类型的对象强制转换为'System.Collections.Generic.IEnumerable`1 [MyClass]'.

我也尝试过:

 IEnumerable<MyClass> vats = here.All() as IEnumerable<MyClass>;
Run Code Online (Sandbox Code Playgroud)

但它返回null.

c# dynamic-typing dynamictype

7
推荐指数
1
解决办法
2万
查看次数

了解PHP类型强制

我看到这一小段代码正在逃避我的理解:

<?php

$a = '0e462097431906509019562988736854';
$b = '0e830400451993494058024219903391';

var_dump($a == $b);
Run Code Online (Sandbox Code Playgroud)

哪个会输出:

bool(true)
Run Code Online (Sandbox Code Playgroud)

据我所知,使用==PHP时会尝试进行模糊比较,在类型之间进行静默转换以执行比较.我理解的是为什么PHP似乎认为这两个字符串是相同的.我会想到,因为$a并且$b是字符串,所以不需要进行类型转换.

我不明白的是什么?

php type-conversion dynamic-typing

7
推荐指数
1
解决办法
3886
查看次数