来自
虽然字符串索引签名是描述“字典”模式的一种强大方法,但它们也强制要求所有属性都与其返回类型匹配。
然后他们展示了这个界面:
interface NumberDictionary {
[index: string]: number;
length: number; // ok, length is a number
name: string; // error, the type of 'name' is not a subtype of the indexer
}
我的问题是-为什么name必须是索引器的一个子类型?如果我有
这两行之间没有区别,因为编译器在第二行中理解它是一个类型为int的数组。
var x = new int[] { 1, 2, 3 }; //Fine, x is int[]
var x = new [] { 1, 2, 3 }; //Fine, x is int[]
但为什么我不能用不同的类型来做呢?为什么编译器不将我的变量转换为输入对象
var x = new object[] { 1, "df", 5 }; //Fine, x is object[]
var x = new [] { 1, "df", 5 }; //Erro
在C#中,数组索引的类型是什么?
例如,在下面的代码中,在访问数组元素(第三行)之前,索引是否会转换为int类型?
T[] myArray = new T[255];
byte index = 2;
T element = myArray[index];
如果不是,使用'byte‘类型的索引访问数组元素是否比使用'int’类型的索引更快?
谢谢
我正在学习scala的含义。在下面的示例代码中,不会自动调用隐式应用:
package learn
object ImplicitApplyInClass {
def main(args: Array[String]): Unit = {
implicit val ss = "abc"
//This is working
val a = A(1).apply.toUpperCase
//This is giving compile time error
//val b = A(1).toUpperCase
}
}
c
我想从localHost获得语言,并在翻译管道中使用它,如下所示:
transform(value: string): string {...
localStorage.setItem("language", JSON.stringify("en"));
let language = JSON.parse(localStorage.getItem("language") ?? "en");
language = language as keyof typeof translates[number];
const translate
我一直在关注这篇博客文章,试图了解如何使用Scala 3:中的路径依赖类型来模拟存在量化的类型。
然后我做了下面的例子。
首先,我们定义了一元论:
trait Monoid[A]:
val id: A
def combine(l: A, r: A): A
object StringMonoid extends Monoid[String]:
val id = ""
def combine(l: String, r: String) = l + r
object AdditiveIntMonoid extends Monoid[Int]:
val id =
当我回答时,我观察到了一种非常奇怪的行为--当它们有模糊类型时,它们似乎能够推断出它们的类型。
例如,这不能编译
double a = new Random().Next(2) == 0 ? (short)1 : (uint)1;
因为编译器在类型检查时“不查看”double a部件,并看到表达式的类型为short或uint。表达式不能有两种类型,因此输出错误。这很好。众所周知,C#不考虑要分配给的变量类型,就像泛型中的那样:
static T F<T>() => default(T);
double d = F(); // can't infer that T is
我是C#的新手。
首先,我可以问一下int是否是C#中整数的默认类型?换句话说,整数的文字在C#中是否被视为int?
如果是这样的话,因为我们总是可以像下面这样声明一个字节:
byte b = 1;
我可以问一下,在初始化过程中是否发生了隐式类型转换(我的猜测是:文字1首先被视为int,然后被转换为byte)?
如果上面的猜测是正确的,那么我可以问为什么允许我们使用上面的文字隐式地将int转换为byte,而当文本被int类型的变量替换时却不能这样做(例如,如下所示)?
int a = 1;
byte c = a; // error
此外,我发现对于常量:
const int d = 1;
by
代码:
const f: any = function(...args: any[]) {
const a = this;
};
错误:
semantic error TS2683 'this' implicitly has type 'any' because it does not have a type annotation.
我有一个函数被传递到另一个函数,但是我不知道为什么这两个函数都工作并且不产生任何警告。
typedef short (*COMP)(char *, char *);
DATA *bst_get(BST *, char *, COMP);
short cmp(char *a, char *b)
{
if (strstr(a, b))
return 0;
return strcmp(a, b);
}
// Both of these produce the same results
// the difference is '&cmp
假设我有以下scala代码:
case class Term(c:Char) {
def unary_+ = Plus(this)
}
case class Plus(t:Term)
object Term {
implicit def fromChar(c:Char) = Term(c)
}
现在,我从scala控制台获得以下内容:
scala> val p = +'a'
p: Int = 97
scala> val q:Plus = +'a'
<console>:16: error: type mismatch;
f
可以将方法分配给具有匹配类型args的委托:
Func<string, DateTime> f = DateTime.Parse;
可以将lambda分配给具有协变量类型args的委托:
Func<string, object> f = s => DateTime.Parse(s);
但是,不能将方法分配给具有协变量类型args的委托:
Func<string, object> f = DateTime.Parse; //ERROR: has the wrong return type
为什么不行?
我有一个对some_func的函数调用,它以int为参数。
int some_func(int);
class S {
public:
S(int v) {
a = v;
}
...
operator bool() const {
return true;
}
int a;
}; // class S doesn't define any "operator int"
S obj;
int x = some_func(obj); // some_func expected an int argument
在上面的代码中,some_fun
为什么编译器不能自动正确地转换此表达式中的值?
var input = "Hello";
object x = string.IsNullOrEmpty(input) ? input : DBNull.Value;
//could try this too and get similar compile time error
object x2 = string.IsNullOrEmpty(input) ? 1 : input;
我知道DBNull.Value不能转换为字符串;然而,我很好奇为什么它不能合并到一个对象中,因为结果只是存储了一个引用。如果你把(object)放在
我喜欢在C#中隐式输入局部变量:
var Beer = new Malt.Beer();
而不是:
Malt.Beer Beer = new Malt.Beer();
我不认为这可以扩展到字段,不是吗?
public var Beer = new Malt.Beer();
而不是:
public Malt.Beer Beer = new Malt.Beer();
它不能编译,但我想知道是语法错误还是隐式变量(var)不能在这个作用域中使用?