我知道模板
T add(T)(T a, Tb){
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
但这需要用户询问哪种类型将返回,我想在里面计算哪种类型将返回如下:
T getField( size_t column ){
if( column == 0 )
T = int;
else
T = string;
return to!T("1");
}
Run Code Online (Sandbox Code Playgroud)
我不知道我是否可以投射对象并改变原型.
谢谢大家
我这样做了
> 5 + 2 // 7, this is correct
> 5 - 2 // 3 , obviously
> 5 - "2" // 3 , ohh, that's awesome
> 5 % "2" // 1 , :)
> 5 / "2" // 2.5,looks like 2 is automatically converted to integer.Perfect!
> 5 + "2" // "52" Really?
Run Code Online (Sandbox Code Playgroud)
确定性,额外的东西正在加号.那是什么,为什么?
我试图理解语言对类型安全的意义.在动态类型语言中,类型检查在运行时执行,例如,如果我运行以下PHP代码:
<?php
class MyClass
{
}
// Create a MyClass instance
$mc = new MyClass();
// Create an int variable
$i = 1234;
// Add $mc and $i
$result = $mc + $i;
?>
Run Code Online (Sandbox Code Playgroud)
我会收到错误,因为+ operator它不支持MyClass数据类型.所以基本上类型检查是在运行时执行的.
类型安全是否意味着无论是在编译时还是在运行时执行类型检查,或者它是否意味着必须仅在编译时执行类型检查,因此必须明确地为每个变量提供数据类型(如C ,Pascal,Java等).
php programming-languages static-typing dynamic-typing type-safety
我希望有一种类似行为boost::any但类型更有限的类型.像这样的东西:
limited_any<int,long,string> x; // x is like boost::any but is guaranteed to contain only an int, a long, or a string
Run Code Online (Sandbox Code Playgroud)
您会如何推荐实施此功能?(无论是我自己还是使用现有的解决方案)
在我的Java应用程序中,我有方法
public <T extends Transaction> boolean appendTransaction(T transaction) {
...
}
Run Code Online (Sandbox Code Playgroud)
在这个方法里面我需要创建一个扩展Transaction的对象T的实例
这样做是否正确
T newTransaction = (T) transaction.getClass().newInstance();
Run Code Online (Sandbox Code Playgroud) 我正在尝试动态订购产品列表.
Product:
price (int)
name (string)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已成功获得以下内容:
string columnToOrderBy = "price";
ParameterExpression param = Expression.Parameter(typeof(Product), "p");
var ordering = Expression.Lambda<Func<Product, double>>(Expression.Property(param, columnToOrderBy), param);
Run Code Online (Sandbox Code Playgroud)
这适用于按价格排序,但由于列类型,按名称排序时无效.
Expression.Lambda<Func<Product, double>>
Run Code Online (Sandbox Code Playgroud)
无论如何都要在Func方法中获取列的类型来设置它?
随着dynamic我们非常有动感指针,但不完全是一个动态对象.C#中真正的动态对象是ExpandoObject,但对于大多数人来说,这是一个非常未知的类.expando允许在运行时创建和删除成员,就像哈希(类似于JavaScript).
为什么ExpandoObject的优点是在一个单独的类中实现的,而不仅仅是,作为匿名类型的一个特性实现?
也许这不是一个好的举动,因为缺乏类型安全?或者可能是由于涉及(DLR)开销?
在编程语言中,推断类型和动态类型之间有什么区别?我知道动态类型,但不知道动态类型与推断类型有何不同以及如何?有人可以举例说明吗?
我想为作为参数传递的 Python 类型正确添加类型。例如,假设我们想向以下函数添加类型:
def do_something_based_on_types(
...
type_name: str,
str_to_type_mapping: Dict[str, Any], # what instead of Any?
):
...
object = str_to_type_mapping[type_name]()
...
Run Code Online (Sandbox Code Playgroud)
我们希望传递一个映射到str类型,基于该映射我们希望构造选定类的对象。对于这种情况,正确的类型是什么(而不是Any在代码示例中使用)。
我发现自己经常做类似的事情:
msg = ['This', 'is', 'a', 'message'] # (or built up programmatically)
msg = ' '.join(msg)
Run Code Online (Sandbox Code Playgroud)
它将变量的类型msg从 a更改list为 a str,就像 Python 等动态类型语言所允许的那样。但这是个好主意吗?这里的分配靠近在一起并没有太多混乱,但是如果msg在宽间隔的代码中以两种不同的形式使用怎么办?
dynamic-typing ×10
c# ×2
python ×2
asp.net-mvc ×1
boost-any ×1
c++ ×1
c++11 ×1
d ×1
java ×1
javascript ×1
linq ×1
phobos ×1
php ×1
type-safety ×1
types ×1
typing ×1
variant ×1