标签: dynamic-typing

Haskell类型系统的本质:静态/动态,手动/推断?

我正在学习Haskell,并试图掌握Haskell类型系统究竟是如何工作的,重新确定事物的类型:动态,静态,手动设置,推断?

语言我知道一点:

  • C,Java:由程序员手动设置,在编译时验证,如int i;强类型(从字符串中减去整数是编译错误).典型的静态类型系统.

  • Python:运行时自动推断的类型(动态类型),强类型(intstr引发异常中减去).

  • Perl,PHP:在运行时自动推断类型(动态类型),弱类型.

  • Haskell:类型通常在编译时自动推断(在编译时,程序员明确设置此类型或类型),强类型.

Haskell的类型系统真的值得描述"静态"吗?我的意思是自动类型推断不是(经典的)静态类型.

haskell type-systems static-typing typing dynamic-typing

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

Objective-C中的动态类型和返回值

我遇到了一个我无法理解的非常奇怪的行为.我有一个Texture类型contentWidth属性的类int.此类包含在Image具有width类型属性的类中int.所述widthImage计算简单地作为contentWidth底层质地:

- (int) width
{
    return texture.contentWidth;
}
Run Code Online (Sandbox Code Playgroud)

现在ImageButton想要读取图像大小的类(通过合成,而不是继承)使用:

// image is of type ‘id’
int width = [image width];
int height = [image height];
Run Code Online (Sandbox Code Playgroud)

问题是height变量设置得很好,而width变量包含NaN(-2147483648).我检查了尺寸 - 它们大约是200×100左右,没有接近int极限.此外,Xcode调试器工具提示Texture正确显示两个属性,只有在宽度通过两个访问器后,数字才会出现乱码.对象未释放.我错过了什么?


更新:我已经扩展了Image类中的访问器以查看问题的来源:

- (int) width
{
    const int w = texture.contentWidth;
    return w;
}
Run Code Online (Sandbox Code Playgroud)

现在,当我在第一行中断时,w获得正确设置.我跳过,执行返回到调用函数:

- …
Run Code Online (Sandbox Code Playgroud)

objective-c dynamic-typing

4
推荐指数
1
解决办法
1818
查看次数

.NET泛型类实例 - 传递可变数据类型

正如标题所示,我想将可变数据类型传递给模板类.像这样的东西:

frmExample = New LookupForm(Of Models.MyClass) 'Works fine

Dim SelectedType As Type = InstanceOfMyClass.GetType() 'Works fine
frmExample = New LookupForm(Of SelectedType) 'Ba-bow!
frmExample = New LookupForm(Of InstanceOfMyClass.GetType()) 'Ba-bow!
Run Code Online (Sandbox Code Playgroud)
LookupForm<Models.MyClass> frmExample;
Type SelectedType = InstanceOfMyClass.GetType();
frmExample = new LookupForm<SelectedType.GetType()>(); //Ba-bow
frmExample = new LookupForm<(Type)SelectedType>(); //Ba-bow
Run Code Online (Sandbox Code Playgroud)

我假设它与在编译时处理的模板有关,但即使我在那里没有标记,它也无法解决我的问题.我找不到有关使用Reflection实例模板类的任何相关信息.

(如何)我可以在运行时创建动态类型存储库的实例吗?

c# vb.net generics reflection dynamic-typing

4
推荐指数
2
解决办法
4999
查看次数

纯ANSI-C:制作通用数组

是否可以在纯ANSI-C中复制通用数组?

我有这个结构,它包含一个数组(目前用于浮点数)和一些变量,如数组中的变异大小和容量.

typedef struct _CustomArray
{
    float* array; //the array in which the objects will be stored
    int size; //the current size of the array
    int capacity; //the max capacity of the array
} CustomArray; 
Run Code Online (Sandbox Code Playgroud)

我使用这个结构,所以我可以在纯C中创建一个数组,我可以在其中添加/删除项目,在需要时动态扩展数组大小等所有"标准"数组所做的事情,除了它只用C制作.现在我想这样做,这样当你初始化这个结构时,你可以设置它应该保存的元素的数据类型,此时它只能存储浮点数据类型,但我想使它能够存储任何数据类型/其他结构.但我不知道这是否可行.

此时制作此数组的函数是:

CustomArray* CustomArray_Create(int initCapacity, /*type elementType*/)
{
    CustomArray* customArray_ptr; //create pointer to point at the structure
    float* internalArray = (float*)malloc(sizeof(float) * initCapacity); //create the internal array that holds the items
    if(internalArray != NULL)
    {
        CustomArray customArray = { internalArray, 0, initCapacity }; //make the …
Run Code Online (Sandbox Code Playgroud)

c arrays generics typeof dynamic-typing

4
推荐指数
1
解决办法
5755
查看次数

如何动态转换为使用Swift 2.0在字符串中命名的Type?

我需要将返回值强制转换为我需要保持动态的特定类型,例如

let cellType = "CellTypeToBeResolved"
cell = (tableView.dequeueReusableCellWithIdentifier("myID") as? CellTypeToBeResolved)!
Run Code Online (Sandbox Code Playgroud)

这怎么可能在Swift 2.0中?日Thnx!

casting dynamic-typing ios swift2

4
推荐指数
1
解决办法
1061
查看次数

Haskell:用 Typeable 证明`存在 t。一个 ~ D t`

我有

data D t = ...
data SomeStuff = forall a (Typeable a, ...) => SomeStuff a
Run Code Online (Sandbox Code Playgroud)

在某些时候,我得到了一个 SomeStuff,a我想尝试将其内部转换为D t任何类型t都可以,我只对这部分感兴趣)。一些(在伪 Haskell 中)看起来像:D

case someStuff of
  SomeStuff (_ :: a) -> case eqT :: Maybe (a :~: (exists t. D t)) of
    Just Refl -> -- proven that `exists t. a ~ D t`
    Nothing -> -- nothing to do here
Run Code Online (Sandbox Code Playgroud)

我一直在摆弄Data.Type.EqualityType.Reflection(如应用程序等),但我无法让它工作。任何人都有办法做到这一点?

haskell dynamic-typing

4
推荐指数
1
解决办法
55
查看次数

Linq to Entities - NotSupportedException - 动态类型 - string.Format


我正在从Linq-to-SQL切换到Linq-to-Entities并且在转换过程中遇到错误"LINQ to Entities无法识别方法'System.String Format(System.String,System.Object ,System.Object)'方法,并且此方法无法转换为商店表达式".以下代码是罪魁祸首.我知道这必须使用我在下面使用的动态类型生成.我怎样才能使用动态类型并使用L2E?

var query = _db.Persons.Where(p => p.PersonId == PersonId);
if (query.Count() > 0)
{
  var data = query.Join(_db.Users, p => p.UserId, u => u.UserId, (p, u) => new
    {
      Id = p.PersonId,
      Name = string.Format("{0} {1}", p.FirstName, p.LastName),
      Phone = p.Phone,
      Email = u.Email
    }).Single();
  return data;
}
Run Code Online (Sandbox Code Playgroud)

编辑: 好的,在@John Hartsock向我展示简单的解决方案之后感觉有点愚蠢...
如果我想做一些更复杂的字符串操作怎么办?

c# linq-to-entities entity-framework dynamic-typing

3
推荐指数
1
解决办法
1546
查看次数

可键入类型的"模式匹配"

例如,假设我们有以下数据结构:

data Foo = Bool Bool | Int Int | Double Double
Run Code Online (Sandbox Code Playgroud)

现在,有更简单的方法来做到这一点:

foo :: Typeable a => a -> Foo
foo x = maybe (error "i dunno") id $
  liftM Bool   (cast x) `mplus`
  liftM Int    (cast x) `mplus`
  liftM Double (cast x)
Run Code Online (Sandbox Code Playgroud)

有人想过为Typeable类型制作模式匹配的语法吗?

syntax haskell types dynamic-typing

3
推荐指数
1
解决办法
257
查看次数

MOQ将动态类型作为对象问题返回

如果有人提出这个问题但我无法在任何地方找到答案.

我的问题是在使用MOQ模拟返回方法时,该方法返回动态类型.我正在使用第三部分库,它使用动态时间.MOQ似乎将动态类型转换为对象.

Mock<IFacebookHelper> mockFbHelp = new Mock<IFacebookHelper>();
mockFbHelp.Setup(x => x.Get("me")).Returns(new { email = "test@test.com", id="9999" });
Run Code Online (Sandbox Code Playgroud)

模拟帮助器中的方法.

public dynamic Get(string p)
{
    var client = new FacebookClient(AccessToken);
    return client.Get("me");
}
Run Code Online (Sandbox Code Playgroud)

来自控制器的代码使用模拟结果.

_facebookHelper.AccessToken = accessToken;
dynamic result = _facebookHelper.Get("me");
int facebookId = int.Parse(result.id);  //This errors as id doesn't exist.
Run Code Online (Sandbox Code Playgroud)

基本上,MOQ返回了一个动态类型的对象,需要将其作为某种东西进行渲染.

有谁知道如何解决这个问题?我假设它可能是因为MOQ没有在.NET 4中编码因此不支持动态类型?

编辑

实际上我不认为这是一个MOQ问题,因为我创建了自己的模拟类,但仍然遇到了同样的问题.我是动态类型的新手,但不知道发生了什么.

编辑2 - 部分回答..问题毕竟与MOQ无关

实际上问题似乎是由于在不同的程序集中创建了动态类型.虽然我使用JObject类型解决了我最初的问题,但我还是想弄明白这一点.

namespace MyLib.Tools
{
    public interface IDynTest
    {
        dynamic GetData();
    }
}
Run Code Online (Sandbox Code Playgroud)
namespace MyLib.Tools
{
    public class DynTest : Effect.Tools.IDynTest
    {
        public dynamic GetData() …
Run Code Online (Sandbox Code Playgroud)

c# return moq mocking dynamic-typing

3
推荐指数
1
解决办法
3885
查看次数

我怎么能够创建一个新的接口Microsoft.Office.Interop.Word.Application实例

根据Word Interop文档,Microsoft.Office.Interop.Word.Application是一个接口,但我能够创建一个新的实例,如下所示

var application = new Microsoft.Office.Interop.Word.Application();
Run Code Online (Sandbox Code Playgroud)

DotNetPerls上也有这样的例子.通常不可能在C#中创建接口的实例,那么这里怎么可能呢?这是COM或动态类型的功能吗?

c# com com-interop office-interop dynamic-typing

3
推荐指数
1
解决办法
218
查看次数