我是新来的艾达,有一些问题。我创建了一个通用日期包:
Date.ads:
GENERIC
PACKAGE Date IS
TYPE MonthName IS (January, February, March, April, May, June, July, August,
September, October, November, December);
TYPE DateRec IS RECORD
Month: MonthName;
Day: Integer RANGE 1..31;
Year: Integer;
END RECORD;
P
我正在看的问题,我很好奇为什么这个deosn不能编译。
给出这段代码,有人能解释为什么对IBase.Test()的调用不能解析成正确的扩展方法吗?
public interface IBase { }
public interface IChildA : IBase { }
public interface IChildB : IBase { }
public static class BaseExtensions
{
public static IBase Test(this IBase self) { return self; }
public static T Te
我目前在大学的实时编程语言课程中学习Ada,有一个关于泛型的问题。
我有一个通用的过程csv_put
package PSU_Logging is
type logged_signal_names_t is (
t,
U_V1,
I_L1,
U_C1,
I_L2,
U_C2,
I_Load
);
private
... Some types, tasks and subprogramms ...
generic
type Item_Type_t is private;
说,我有
member this.Test (x: 'a) = printfn "generic"
1
member this.Test (x: Object) = printfn "non generic"
2
如果我在C#里叫它
var a = test.Test(3); // calls generic version
var b = test.Test((object)3); // calls non generic
我遇到了一个例子,它表明在方法签名和方法上擦除是不同的,但是我不知道为什么/怎么做。指出:
如果类型声明T有成员方法m1,并且存在在T中声明的方法m2或T的超类型,则这是一个编译时错误,使得以下所有条件都保持不变:
m1和m2同名。
m2可以从T.
m1的签名不是m2签名的子签名(第8.4.2节)。
m1或某些方法m1重写(直接或间接)的签名与m2或某些方法m2重写(直接或间接)的签名具有相同的擦除性。
编译时错误
class C<T> {
T id (T x) {...}
}
class D extends C<String>
我知道Java不允许在泛型中使用原始数据类型,例如
List<int> l = new List<int>();
是不允许的
我读过一篇相关的文章,其中说这是为了向后兼容。有人能解释为什么不允许在泛型中使用原语来保持向后兼容性吗?我非常希望能举个例子作一个小小的解释。
一个子问题:泛型在java中实现的主要/次要缺点是什么。
您的答复将不胜感激。
我正在开发一个通用程序,它用Ada过滤数据。我试着用一个列表和一棵树来做这件事。
具有列表实现的程序工作得很好。我的问题是和树在一起。
我有不同的通用包:
Arbre_Binaire_Recherche_g.ads
generic
TYPE Element IS PRIVATE;
WITH FUNCTION "="(E1,E2 : IN Element) RETURN Boolean;
WITH FUNCTION "<"(E1,E2 : IN Element) RETURN Boolean;
WITH PROCEDURE Liber
我想知道是否有办法从Ada泛型中获得更小/更高效的汇编程序代码。
例如,我编写了一个小型虚拟Ada程序(main.adb)来显示一个通用过程&实例化它6次:
with Ada.Text_Io;
procedure Main is
generic
X : Natural;
with procedure Bob (S : in String);
procedure Thing_Gen (S : in String);
procedure Thing_Gen (S : in String) is
begin
for I in 0
让我想知道泛型方法的具体实现是从哪里开始的。我已经尝试了谷歌,但没有找到正确的搜索结果。
如果我们举这个简单的例子:
class Program
{
public static T GetDefault<T>()
{
return default(T);
}
static void Main(string[] args)
{
int i = GetDefault<int>();
double d = GetDefault<double>();
strin
未编译此代码:
static class Foo
{
public static Bar Do(Func<Bar> f) => null;
public static Bar<TOut> Do<TOut>(Func<Bar<TOut>> f) => null;
}
public class Bar
{
}
public class Bar<TOut>
{
public static implicit operator Bar<TOut>(TOut i) => nul
由于使用put打印语句而导致代码无法编译。将在下面发布代码。
-- createlis.ads
generic
size: integer;
type itemtype is private;
package createlis is
procedure addtolist( ad : in itemtype );
procedure printlist;
procedure printlist1(pt: in integer );
procedure delet
我将从Ada中的一个通用过程的经典示例开始:
-------------------------
-- swaps.ads
-------------------------
package Swaps is
generic
type E is private;
procedure Generic_Swap (Left, Right : in out E);
end Swaps;
-------------------------
-- swaps.adb
-------------------------
package body Swaps is
procedure
考虑以下两种扩展方法:
using System;
using System.Collections.Generic;
using System.Linq;
public static class Extensions
{
public static bool Contains(this IEnumerable self, object obj)
{
foreach (object o in self)
{
if (Object.Equals(o, obj))
{
我有一个带有通用接口的父包。我现在想要创建这个接口的几个实现,每个实现都在一个不同的文件中。我想我可以简单地让这些包到包含接口的包中,实例化泛型,然后直接访问子包,但是这给了我一个错误,即子包也必须是泛型的。
这使我想到以下实现:
parent.ads:
generic
type T is private;
package Parent is
type I_Generic is interface;
type Any_Generic is access all I_Generic'Class;
function Get (This : in out I_G
我想用Ada制作添加数组元素的子程序。子程序"Add_Data“有3个参数-第一个参数=泛型数组(整数数组或实数数组)第二个参数=整数(数组大小)第三个参数=泛型sum (整数数组-> sum将是整数,实数-> sum数组将是实数)
我从ideone.com编写的。(我只想看到整型数组的结果。之后,我将通过REAL的数组进行测试)
With Ada.Text_IO; Use Ada.Text_IO;
With Ada.Integer_Text_IO; Use Ada.Integer_Text_IO;
procedure test is
generic
在MEF中导出泛型类型时,我对此产生了一些困惑
我注意到:
new Dictionary<string,bool>().GetType() == typeof(Dictionary<,>)
false
new Dictionary<string,bool>().GetType().GetGenericTypeDefinition() == typeof(Dictionary<,>)
true
然而,Dictionary<,>本身并不被认为是“类型”,因为这实际上会产生编译错误:
new Dictionary<string,boo
如何在SPARK Ada中实例化非库级别的包?
假设我有这样的东西:
subtype Die is Integer range 1..6;
package Random_Die
is
new Ada.Numerics.Discrete_Random(Die);
这给了我错误:
instantiation error at a-nudira.ads.45
incorrect placement of "Spark_Mode"
Random_Die is not a libray level package
大概我需要为Ada.Numerics.Discrete_Random关
当类型参数为Int时,我找不出如何获取Option的类型参数
我尝试了以下代码:
class TestClass {
val intField: Option[Int] = Some(1)
}
val cls = new TestClass
val field = cls.getDeclaredField("intField")
val typeParams = field.getGenericType.asInstanceOf[ParameterizedType].getActualTypeArguments
typeParams给了我java.lang.Object
由于Random(Generator, First, Last)是在运行时实现的,GNAT允许以下代码,但它不是Ada2012的一部分。我可以导致一个编译错误,因为它应该是不可用的?
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Numerics.Discrete_Random;
procedure Main is
package Positive_Random is new Ada.Numerics.Discrete_Random
(Result_Subtype => Positive);
Generator : Pos
如果在Java中将泛型类的实例声明为原始类型,那么编译器是否为所有类成员方法假定参数化的Object类型?这是否扩展到那些返回具体参数化类型的某种形式(例如Collection)的方法?
我错误地声明了一个没有参数化类型的泛型类的实例,这导致了非常有趣的下游效应。我提供了一个简单的场景示例,它产生了一个“不兼容类型”编译错误。我的基本问题是:为什么javac会产生一个“不兼容类型”错误,抱怨下面所示的行?
import java.util.*;
public class Main {
public static void main(String[] args) {
fi
考虑以下代码:
public class Main {
public static class NormalClass {
public Class<Integer> method() {
return Integer.class;
}
}
public static class GenericClass<T> {
public Class<Integer> method() {
return Integer.class;
我不断得到下面所述的错误。我已经将违规记录移入和移出包的私有部分,但错误仍然存在。我是Ada的新手,我在实现这个通用堆栈来保存记录数组时遇到了问题。 我已经将记录和类型声明移入和移出了private部分。我还尝试在私有部分之前添加"type garagebay is private“声明,如代码所示。 -- .ads file --
generic
low: integer; --lowerbound of stack
up: integer; -- upperbound of stack
type item is private; -- type of stack
p
我正在尝试编写一个通用包,所需的操作之一是对通过总线接收的数据记录进行校验和。记录类型会有所不同,它是一个泛型参数。但是,任何访问泛型参数成员的尝试都会导致编译错误。
错误..。(Ada 95 GNAT 2009)
file.adb:XX no selector "Data" for private type "The_Transfer_Type" defined at file.ads:YY
声明..。
generic
type The_Transfer_Type is private;
SIZE : Integer;
package CC_Test_
所以我的任务是:
--请使用包/类的一般实例化。每个BMR (矩阵)的空间必须在泛型包/模板内的系统堆栈中分配,可能是在泛型实例化期间!您特别不能使用"new“、”malloc“或任何其他操作符,这些操作符在运行时以任何语言在堆中分配空间。用荧光笔清楚地标记代码的这一部分!您必须读取所有事务并打印泛型包/模板中的所有结果。I/O例程必须作为泛型参数传递。
和不相关的代码:
generic
type subscript is (<>); --range variable to be instantiated
type myType is private
考虑两种扩展方法:
public static T MyExtension<T>(this T o) where T:class
public static T MyExtension<T>(this T o) where T:struct
和一个类:
class MyClass() { ... }
现在在上述类的一个实例上调用扩展方法:
var o = new MyClass(...);
o.MyExtension(); //compiler error here..
o.MyExtension<MyClass>(); //tried this as we
当我跑步时:
MethodInfo m = typeof(Expression).GetMethod("Lambda", new Type[]{typeof(Expression), typeof(ParameterExpression[])});
我得到:
System.Reflection.AmbiguousMatchException: Ambiguous match found.
这是为了一般性地这样做(而不是知道它是一个字符串)。
var newExpression = Expression.Lambda<Func<T, string>>(pr
我正在尝试向我的源代码添加一个存储库(datastax)。这个存储库要求您添加用户名和密码以及还警告您必须对特殊字符进行密码。。
所以我补充道:
deb https://user@mail.com:p@ssword@debian.datastax.com/enterprise stable main
但是apt-get update说:
W: Failed to fetch https://ssword@debian.datastax.com/enterprise/dists/stable/main/binary-amd64/Packages Could not resolve host:
public interface ICardEntity { ... }
public class Card : ICardEntity { ... }
public static class MyExtensions
{
public static List<T> ToList<T>(this IQueryable<T> query) where T : ICardEntity
{ ... }
}
// DbContext
public class ApplicationDbContext : DbContext
{
pu