鉴于以下界面Fn,
interface Fn<A> {
(): A
}
Run Code Online (Sandbox Code Playgroud)
可以使用构建器实例化实现接口的对象
function buildFn<A>( val: A ): Fn<A> {
return () => { return val }
}
Run Code Online (Sandbox Code Playgroud)
现在,使用以下在 Typescript 中有效的接口
interface FnString extends Fn<string> {
(): string
toLowerCase(): string
}
Run Code Online (Sandbox Code Playgroud)
我如何编写一个构建器函数来实例化一个实现的对象FnString?
编辑:解决方案感谢@basarat
注意:重构String->string根据评论
function builderFn(str: string): FnString {
var fn = <FnString>(() => str)
fn.toLowerCase = str.toLowerCase
return fn
}
Run Code Online (Sandbox Code Playgroud) 鉴于这2个打字稿文件
api/Token.ts
interface Token {
code: string
}
export default Token
Run Code Online (Sandbox Code Playgroud)
和 index.ts
export * from './api/Token'
Run Code Online (Sandbox Code Playgroud)
tsc 1.5与--declarations交换机将生成两个.d.ts文件(具有相似的内容)
api/Token.d.ts
interface Token {
code: string;
}
export default Token;
Run Code Online (Sandbox Code Playgroud)
和 index.d.ts
export * from './api/Token';
Run Code Online (Sandbox Code Playgroud)
使用以下选项运行grunt-dts-bundle
dts_bundle: {
release: {
options: {
name: 'my-module',
main: 'index.d.ts'
}
}
}
Run Code Online (Sandbox Code Playgroud)
将生成具有my-module.d.ts以下内容的环境模块声明文件
declare module 'my-module' {
export * from './api/Token';
}
Run Code Online (Sandbox Code Playgroud)
但是,由于以下原因,此声明无法编译: Import or export declaration in an ambient module declaration cannot reference module through …
说我有一个界面
interface Applicative<T> {}
Run Code Online (Sandbox Code Playgroud)
现在我想定义一个函数f:
如何在Typescript中定义它?
function f<U extends Applicative>(fn: Function, a: U<any>): U<Function>
Run Code Online (Sandbox Code Playgroud)
是我天真的尝试,但这是无效的
我正在尝试构建异构索引结构并提出以下解决方案,但我被告知不要使用存在类型.
你能看到更好的解决方案吗?
我想保持接口定义(type和class)与具体实现(data和instance)之间的分离.编辑以下@ hammar的评论:在实际应用程序中,值不是Shown,而是简单地存储查询; myData附加记录也更复杂.
如果这可以带来更好的解决方案,那么确切的要求是构建地图地图(内部地图).每个内部地图都是同质的,Map String a但是每个内部地图可以为其值强制执行不同的类型.您可能还将其视为两级索引结构.实现不必使用Data.Map但必须高效.
{-# LANGUAGE ExistentialQuantification #-}
module Scratch.SO_ExtistentialTypes where
import Data.Map
data HeteroValue = forall a. Show a => HV a
instance Show HeteroValue where
show (HV b) = show b
type MyMap = Map String HeteroValue
class MyClass c where
getMyMap :: c -> MyMap
data MyData = MyData {
myMap :: MyMap
} …Run Code Online (Sandbox Code Playgroud) 测试 gradle 作为 maven 的替代品,我们有一个 build.gradle 文件,其中包含以下插件
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath "com.moowork.gradle:gradle-grunt-plugin:0.6"
classpath 'org.akhikhl.gretty:gretty:+'
}
}
apply plugin: 'scala'
apply plugin: "com.moowork.grunt"
apply plugin: 'war'
apply plugin: 'org.akhikhl.gretty'
Run Code Online (Sandbox Code Playgroud)
./gradlew appStart并./gradlew grunt_dev从控制台正常运行。
但是在添加行时
appStart.dependsOn grunt_dev
到脚本,./gradlew appStart失败
Could not find property 'appStart' on root project 'blah'.
为什么appStart任务从 gradle 包装器中可见,而不是在脚本中?
更新
按照下面的@Opal 解释,以下内容允许将任务连接在一起
//Tasks defined in plugins are added after all projects are evaluated
//We …Run Code Online (Sandbox Code Playgroud) 我有来自GlobalSign Authority的以下通配符证书文件.
root.crt
intermediate.crt
private.key
Run Code Online (Sandbox Code Playgroud)
我想使用上面的cert文件配置tomcat HTTPS.我相信Tomcat支持PKCS12格式.
如何转换PKSC12格式的证书文件?我如何在tomcat密钥库中导入它们,特别是中间证书?
给出一个矢量
std::vector<BigObject> v;
Run Code Online (Sandbox Code Playgroud)
和工厂功能
BigObject genBigObject();
Run Code Online (Sandbox Code Playgroud)
我想避免复制BigObject实例.
哪一个更快?
v.push_back(genBigObject());
Run Code Online (Sandbox Code Playgroud)
要么
v.push_back(std::move(genBigObject()));
Run Code Online (Sandbox Code Playgroud)
我可以依靠复制省略将事实八方通发生的呢?(我可以删除复制构造函数BigObject,但是,好吧......)
使用以下类型和类定义,我不明白为什么我在创建instance下面时得到错误.
我需要MyMap来保存异构值的映射.
{-# LANGUAGE ExistentialQuantification #-}
module Scratch.SO_ExtistentialTypes where
import Data.Map
type MyMap a = Map String a
class MyClass c where
getMyMap :: forall a. c -> MyMap a
data MyData = forall a. MyData {
myMap :: MyMap a
}
instance MyClass MyData where
getMyMap = myMap -- <= ERROR
Run Code Online (Sandbox Code Playgroud)