小编Pat*_*lly的帖子

Ada的T'Class的基础知识

有点尴尬地问这个,但我知道这是最好的.我已经在Ada编程多年了,并且能够流利地理解语言的几乎所有部分.但是,我似乎永远无法绕过T'Class.借用别人,有人可以"像我五岁那样解释它吗?".

编辑:我买它只是为了拥有,但包含在内的是T'Class的一个很好的描述和示例使用; 我指的是Michael B. Feldman撰写的"Ada 95的软件构建和数据结构".

ada

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

Ada枚举价值观

我可以处理另一个,而不是干净的方式,但希望能够利用以下内容:

type Prefix is (Yocto, Zepto, Atto, Femto, Pico, Nano,
    Micro, Milli, Centi, Deci, None, Deca, Hecto, Kilo,
    Mega, Giga, Tera, Peta, Exa, Zetta, Yotta);
for Prefix use (
    Yocto => -24,
    Zepto => -21,
    Atto => -18,
    Femto => -15,
    Pico => -12,
    Nano => -9,
    Micro => -6,
    Milli => -3,
    Centi => -2,
    Deci => -1,
    None => 0,
    Deca => 1,
    Hecto => 2,
    Kilo => 3,
    Mega => 6,
    Giga => 9,
    Tera => 12, …
Run Code Online (Sandbox Code Playgroud)

enums ada

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

Ada访问无参数过程“错误约定”

我有以下绑定:

function atexit(proc : access Procedure) return Integer with
    Import, Convention => C;
Run Code Online (Sandbox Code Playgroud)

以及过程:

procedure Exiting is
begin
    Put_Line("Exiting");
end Exiting;
Run Code Online (Sandbox Code Playgroud)

当我尝试这样称呼它时:

I : Integer := atexit(Exiting'Access);
Run Code Online (Sandbox Code Playgroud)

它失败了 subprogram "Exited" has wrong convention

但是提供我自己的(不兼容的)atexit接受参数,并修改Exiting为使用相同的参数,则可以顺利通过过程。

因此,似乎该问题正在将无参数过程作为访问类型传递。

我试图给一个命名的访问类型像

type Procedure_Access is access Procedure;
Run Code Online (Sandbox Code Playgroud)

但是结果是完全一样的。

那我该如何通过无参数程序呢?

function-pointers ada

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

隐藏Ada中的某些运营商

说我有以下类型:

type Example_Type is new Float;
Run Code Online (Sandbox Code Playgroud)

将为Example_Type定义大量内部运算符,这在绝大多数情况下都很好.喜欢:

function "+"(Left, Right : Example_Type) return Example_Type;
Run Code Online (Sandbox Code Playgroud)

function "*"(Left, Right : Example_Type) return Example_Type;
Run Code Online (Sandbox Code Playgroud)

但是,让我们说两个Example_Type的乘法不应该等于另一个Example_Type,就像Dimensions一样.如何有选择地隐藏这些内在运算符?

ada intrinsics

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

什么是"libgnarl"?

什么是libgnarl?我在各个地方找到了对它的引用,比如gcc源代码或gprbuild的详细输出.gprbuild专门报告决定是否libgnarl有必要,所以它显然是一个可选的库,但实际的库是什么?我找不到任何文件.这些源包含一堆看起来像属于标准库的包,但不是(喜欢Ada.Execution_Time.Timers),所以显然我缺少一些东西.

ada gnat

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

为Ruby中另一个数组的每个条目创建两个唯一条目的数组

我正试图像一个阵列

[ "First.Package", "Second.Package" ]
Run Code Online (Sandbox Code Playgroud)

把它变成

[ "First.Package.ads", "First.Package.adb", "Second.Package.ads", "Second.Package.adb" ]
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

packages = [ "First.Package", "Second.Package" ]
files = []
packages.each do |package|
    files << (package << ".ads")
    files << (package << ".adb")
end
return files
Run Code Online (Sandbox Code Playgroud)

这不符合我认为它应该做的事情.我明白了:

First.Package.ads.adb
First.Package.ads.adb
Second.Package.ads.adb
Second.Package.ads.adb
Run Code Online (Sandbox Code Playgroud)

我想要:

First.Package.ads
First.Package.adb
Second.Package.ads
Second.Package.adb
Run Code Online (Sandbox Code Playgroud)

ruby arrays

0
推荐指数
1
解决办法
43
查看次数

Ada 通用子实例化声称需要自身

我有一个带有以下签名的通用包

generic
    type T is private;
    with function "="(Left : T; Right : T) return Boolean is <>;
    with function Wide_Wide_Image(Self : T) return Wide_Wide_String is <>;
package Generics.Testing.Assertions is
Run Code Online (Sandbox Code Playgroud)

它有一个带有以下签名的子包

generic
    with function "<"(Left : T; Right : T) return Boolean is <>;
    with function ">"(Left : T; Right : T) return Boolean is <>;
package Generics.Testing.Assertions.Comparisons is
Run Code Online (Sandbox Code Playgroud)

我正在尝试在另一个包中实例化它们,但有一个有趣的问题。

这工作正常:

package Integer_Assertions is new Generics.Testing.Assertions(
    Integer,
    Wide_Wide_Image => Integer'Wide_Wide_Image);
Run Code Online (Sandbox Code Playgroud)

奇怪的是当我尝试使用以下方法实例化子包时:

package Integer_Comparisons is new Integer_Assertions.Comparisons;
Run Code Online (Sandbox Code Playgroud)

GPS正常地找到了Comparisons包裹,正如它应该的那样。Integer_Assertions …

generics ada

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

Ruby .each因单个元素而失败

我可以很好地迭代一个数组:

def source_names(packages)
    files = []
    packages.each do |package|
        files << (package + ".ads")
        files << (package + ".adb")
    end
    return files
end
Run Code Online (Sandbox Code Playgroud)

但只要传入一个数组(或者可能是任何集合).但是,当只有一个包作为更大脚本的一部分传递给此方法时,这会失败,因为类型是字符串,而不是数组中的单个元素:

在'source_names'中:未定义的方法'each'代表"Generics.Mathematics":String(NoMethodError)

那么我怎么不关心只传递一个元素,它只被识别为字符串?

Clairification:我知道字符串不支持数组方法.我的困惑是为什么我有时会得到一个数组,而一个字符串除了单个元素数组之外.

ruby arrays iterator

-2
推荐指数
1
解决办法
509
查看次数

标签 统计

ada ×6

arrays ×2

ruby ×2

enums ×1

function-pointers ×1

generics ×1

gnat ×1

intrinsics ×1

iterator ×1