我正在考虑将一个非常简单的文本模板库移植到scala,主要是作为学习语言的练习.该库目前在Python和Javascript中实现,其基本操作或多或少归结为此(在python中):
template = CompiledTemplate('Text {spam} blah {eggs[1]}')
data = { 'spam': 1, 'eggs': [ 'first', 'second', { 'key': 'value' }, true ] }
output = template.render(data)
Run Code Online (Sandbox Code Playgroud)
在Scala中这一点都不是非常难以做到的,但我不清楚的是如何最好地表达data
参数的静态类型.
基本上这个参数应该能够包含你在JSON中找到的各种东西:一些基元(字符串,整数,布尔值,空),零个或多个项目的列表,或者零个或多个项目的映射.(出于这个问题的目的,地图可以被限制为具有字符串键,这似乎是Scala喜欢的东西.)
我最初的想法只是使用a Map[string, Any]
作为顶级对象,但这对我来说似乎并不完全正确.实际上我不想在那里添加任何类的任意对象; 我只想要上面提到的元素.与此同时,我认为在Java中我能得到的最接近的是Map<String, ?>
,而且我知道Scala的一位作者设计了Java的泛型.
我特别好奇的一件事是具有相似类型系统的其他功能语言如何处理这类问题.我有一种感觉,我真正想要做的是提出一组我可以模式匹配的案例类,但我不太能想象它会是什么样子.
我有Scala编程,但说实话,我的眼睛开始对协方差/逆变器的东西上釉一点,我希望有人可以更清楚,更简洁地向我解释这一点.
是否有任何强类型的Web编程语言?我现在用PHP编程,但是当我尝试将数字与字符串进行比较时,我常常希望它对我大喊大叫.标准库中可以返回bool或整数的函数也不会变得更容易.
我知道有.NET,但这是我唯一的选择吗?
我很难看到松耦合代码的真实好处.为什么花费这么多精力使灵活的东西与各种其他物体一起工作?如果你知道你需要实现什么,为什么不专门为此目的编码?
对我来说,这类似于创建无类型变量:它使它变得非常灵活,但是它可能会导致问题,因为可能传入了一个意外的值.它也使得它更难阅读,因为你没有明确知道传入的是什么.
然而我觉得强烈打字是受鼓励的,但松散耦合是不好的.
编辑:我觉得我对松散耦合的解释是关闭还是其他人正在以错误的方式阅读它.与我的强耦合是当一个类引用另一个类的具体实例时.松散耦合是指类引用另一个类可以实现的接口.
那么我的问题是为什么不专门调用类的具体实例/定义?我将其类比为具体定义您需要的变量类型.我一直在阅读关于依赖注入的一些内容,他们似乎认为松散耦合更好的设计是事实.
我正在为ASP.NET MVC中未经身份验证的用户实现一个简单的会话购物车,我想做得对.
在过去,我总是将购物车ID存储在持久Session["CartID"]
存储中并作为cookie存储.每当我需要显示购物车时,我都会从我Carts
和CartItems
桌子上查找用户的购物车商品.但在内部我知道更强烈的方法会更清洁.
在谷歌搜索最新的会话MVC之后,我找到了这个术语HttpSessionStateWrapper
,这似乎是处理会话的可测试方式.但我没有找到任何好的教程或标准化的实现.也许这只是一个嗡嗡声,我应该坚持Session["..."]
.
在最新版本的ASP.NET MVC中使用会话实现购物车的正确方法是什么?
.Net中强类型数据集的含义是什么?任何人都可以用清晰简洁的例子来解释吗?
而且,强类型数据集和弱类型数据集之间有什么区别?
强大的服务器端语言有很多选择,但我想不出任何强类型,真正强大的客户端语言.Javascript在表单,基本数学以及与AJAX等服务器交互方面做了很多工作,但与其他语言相比它有其局限性.
我正在寻找能够进行图像处理或数据处理的强类型客户端语言,这样的原始事物.或者,如果有javascript库可以帮助实施变量的数据类型,那么这也可能有用.
TypeScript使用编译时(静态)duck typing.
我喜欢扩展原始类型以防止不正确的替换.例如,我喜欢给信用卡号码变量一个信用卡号码类型,而不是整数.我最近尝试使用一对扩展String的接口在TypeScript中执行此操作,并发现它们可以自由地替换彼此(并且该字符串替代两者).
我真的很想得到编译时的标称输入.有任何想法吗?
这是EF6.我可以.Include()
在我的查询中包含方法(没有双关语)来从相关表中加载信息.但是看起来.Include()方法只接受字符串参数.有没有办法以强类型的方式做到这一点?因此,例如,MyContext.catalog_item.Include("picture")
我可以写一些MyDB.catalog_item.Include(i => i.picture)
像智能感知这样的优点,而不是写作.
根据Dart的网站
Dart是一种健全的语言.
上面句子中"声音"的含义是什么?"声音"相当于"音频"(我可以在上面的声明中交换它们)吗?
我在其他主要编程语言中找不到任何类似的概念.任何人都可以提供其他声音语言的例子吗?
这是一个关于语言设计,模式和语义的难题.请不要因为你没有看到实际价值而进行投票.
首先,让我们考虑一下函数及其参数.然后我们将看看函数与它们的参数/参数和泛型类/函数及其类型参数/类型参数之间的类比.
函数是代码块,带有一些未指定的值,称为" 参数 ".您提供参数并接收结果.
泛型类是具有一些未指定的" 类型参数 "的类.您提供了类型参数,然后您可以使用该类 - 调用构造函数或调用静态方法.
通用功能在非泛型类是具有一些未指定"的功能类型参数 "和一些未指定" 值参数 ".您提供了type-arguments和value-arguments来接收结果.
代表是指向特定功能的指针.创建委托时,不要指定函数参数,而是稍后提供它们.
问题是.Net没有与具有未指定泛型类型参数的泛型函数相当的Delegates .您以后不能为type-parameters提供类型值.我们可以想象代理不仅有自由值参数,还有自由类型参数.
static class SomeClass {
//generic function
public static T GetValue<T>() {
return default(T);
}
}
//creating delegate to generic function or method group
Func{TFree}<TFree> valueFactory = SomeClass.GetValue;
//creating delegate to anonymous generic function
Func{TFree}<int, List<TFree>> listFactory = {TFree}(int …
Run Code Online (Sandbox Code Playgroud) strong-typing ×10
c# ×4
generics ×2
asp.net-mvc ×1
client-side ×1
dart ×1
dataset ×1
delegates ×1
duck-typing ×1
json ×1
scala ×1
session ×1
types ×1
typescript ×1
weak-typing ×1