标签: reflect

错误:无法解析ApplicationModule的所有参数:(?)

我想在没有CLI的情况下创建Angular应用程序.之后我收到一个错误:

错误:无法解析ApplicationModule的所有参数:(?).

项目包含几个文件,主要是:

•main.ts

import 'zone.js/dist/zone'
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './modules/app.module';

platformBrowserDynamic().bootstrapModule(AppModule)
Run Code Online (Sandbox Code Playgroud)

•component.ts

import { Component } from '@angular/core';

@Component({
    selector: 'app-root',
    template: `Hello World`
})
export class AppComponent {}
Run Code Online (Sandbox Code Playgroud)

•module.ts

import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";
import { AppComponent } from "../components/app.component";

@NgModule({
    imports: [
        BrowserModule,
    ],
    declarations: [
        AppComponent
    ],
    bootstrap: [
        AppComponent
    ]
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)

我之前在StackOverflow上搜索,但我找不到解决方案.当有人想要在没有@Injectable装饰器的情况下注入服务时,会发生类似的错误.在我的情况下,我没有任何服务,所以恐怕没有人有同样的错误.

Angular CLI很容易启动项目,但只有当您想要没有生成器的安装项目时,您才知道在引导程序应用程序期间需要创建哪些部分.

angular reflect

8
推荐指数
1
解决办法
2614
查看次数

反序列化未知 Go 的 gob blob

我有一些未知类型的东西。有办法打印出来看里面吗?

可能有gob.Debug,但对我来说不可用 https://golang.org/src/encoding/gob/debug.go

谷歌搜索建议使用,DecodeValue但它需要初始化reflect.Value 如果我得到未知的gob blob,那么我无法传递未知类型的初始化值

https://play.golang.org/p/OWxX1kPJ6Qa

package main

import (
    "bytes"
    "encoding/gob"
    "fmt"
    "reflect"
)


func encode1() []byte {

    x := "123"

    buf := &bytes.Buffer{}
    enc := gob.NewEncoder(buf)
    err := enc.Encode(x)
    if err != nil {
        panic(err)
    }
    return buf.Bytes()

}

func decode1(b1 []byte) {
    var x string
    dec := gob.NewDecoder(bytes.NewBuffer(b1))
    err := dec.Decode(&x)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%#v\n", x)
}

func decode2(b1 []byte) {
//  var x reflect.Value
    x := …
Run Code Online (Sandbox Code Playgroud)

reflection serialization go gob reflect

5
推荐指数
1
解决办法
1071
查看次数

尽管设置了元数据,Reflect.getMetadata() 返回未定义

我正在尝试在我的 TypeScript 应用程序中使用注释。然而,我一定做错了什么,因为Reflect.getMetadata()总是返回undefined,尽管我可以在调试器中看到元数据似乎设置正确。

my-class.ts 带有带注释的属性:

import { jsonIgnore } from './json-ignor';

export class MyClass {
    public prop1: string;
    @jsonIgnore() public prop2: string;
}
Run Code Online (Sandbox Code Playgroud)

json-ignore.ts 带有装饰和注释功能:

const JSON_IGNORE = 'jsonIgnore';

export function jsonIgnore(): any {
    return Reflect.metadata(JSON_IGNORE, true);
}

export function jsonIgnoreReplacer(key: string, value: any): any {
    const meta = Reflect.getMetadata(metadataKey, object, propertyKey);
    // do something with the metadata...
}
Run Code Online (Sandbox Code Playgroud)

现在meta总是undefined。但是当我在调试器中检查MyClass实例时,我看到它的原型中设置了元数据:

  • 我的班级:我的班级
    • 道具1:'foo'
    • 道具2:'酒吧'
    • [[原型]]:对象
      • __元数据__:
        • 道具2:
          • json忽略:true

我还可以轻松访问__metadata__及其条目 …

annotations metadata typescript reflect decoration

5
推荐指数
1
解决办法
1739
查看次数

如何合并两个相同结构类型的 Go 值?

我想创建一个调用的函数merge(),它接受相同结构的两个值,但任何结构,并返回两个结构的合并值。

我希望第一个值优先。例如,如果有两个 structab,在调用之后merge(a,b),如果有两个ab包含的字段,我希望它具有a该给定字段的值。

实现这一点的最佳方法是什么? https://play.golang.org/p/7s9PWx26gfz

type cat struct {
name  string
color string
age   int
}

type book struct {
title  string
author string
}

func main() {
c1 := cat{
    name:  "Oscar",
    color: "",
    age:   3,
}

c2 := cat{
    name:  "",
    color: "orange",
    age:   2,
}

c3 := merge(c1, c2)

// want: c3 = cat{
//               name: "Oscar",
//               color: "orange",
// …
Run Code Online (Sandbox Code Playgroud)

merge struct go reflect

4
推荐指数
2
解决办法
6587
查看次数

由reflect.New()生成的切片的JSON编组在golang中给出null

我在golang中使用reflect来创建一个新的初始化切片.但是当我json.Marshal这个新的反射切片时,我得到一个JSON null值而不是一个[].在这里看到这个例子,我比较两种情况:

package main

import (
  "encoding/json"
  "reflect"
  "log"
)
func makeslice(slice interface{}) interface{} {

  return reflect.New(reflect.TypeOf(slice)).Elem().Interface()
}
func main() {

  s0 := []int{2,3,5}

  s1 := makeslice(s0).([]int)
  js1,e1 := json.Marshal(s1)
  log.Println("case 1:",reflect.TypeOf(s1),reflect.ValueOf(s1),e1,string(js1))

  s2 := []int{}
  js2,e2 := json.Marshal(s2)
  log.Println("case 2:",reflect.TypeOf(s2),reflect.ValueOf(s2),e2,string(js2))

}
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

case 1: []int [] <nil> null
case 2: []int [] <nil> []
Run Code Online (Sandbox Code Playgroud)

请注意case 1case 2生成完全相同的日志输出,但最终的json字符串除外,第一个案例显示null,第二个案例显示[].

为什么会这样?我想要的是case 1显示,[]因为我朋友的客户端应用程序总是期望一个数组,并且零长度数组不应该显示为null.

我究竟做错了什么?

json go reflect

3
推荐指数
1
解决办法
373
查看次数

模式匹配案例中的统一

我试图编写一个类型为forall n, option (n = 1).

我选择option作为reflect避免提供否定案例证明的替代方法。所以Some扮演角色ReflectT并持有证明,None而不持有否定证明。

Definition is_1 n: bool:=
  match n with
    1 => true |
    _ => false
  end.

Lemma is_1_complete : forall n, is_1 n = true -> n = 1.
intros.
destruct n. simpl in H. discriminate.
destruct n. reflexivity.
simpl in H. discriminate.
Qed.

Lemma a_nat_is_1_or_not: forall n, option (n = 1).
intros.
cut (is_1 n = true -> n = 1). …
Run Code Online (Sandbox Code Playgroud)

pattern-matching unification coq dependent-type reflect

3
推荐指数
1
解决办法
120
查看次数

忽略 golang 反射 FieldByName 中的大小写

我正在尝试使用 golang 中的反射从结构中读取我能够成功完成但我想知道我该怎么做才能忽略字段名称的大小写。

我有以下代码

type App struct{
    AppID        string
    Owner        string
    DisplayName  string
}

func Extract(app *App){
appData := reflect.ValueOf(app)
appid := reflect.Indirect(appData).FieldByName("appid")
fmt.Println(appid.String())
owner:=reflect.Indirect(appData).FieldByName("owner")
fmt.Println(owner.String())
}
Run Code Online (Sandbox Code Playgroud)

<invalid-value>由于字段名称的小写,上面的函数返回和它的

有没有办法可以忽略这个案例?

reflection go reflect

2
推荐指数
1
解决办法
662
查看次数

使用reflect,如何为结构体字段(指针)设置值

我尝试通过反射将值设置为结构字段(指针字段),但失败了。

  1. 我获取了结构体字段的名称,因此使用 FieldByName 来获取该字段
  2. 该字段是一个指针。
  3. 我尝试使用 FieldByName().Set FieldByName().SetPointer 来设置值。
type t struct {
    b *int
}

func main() {
    t := new(ts)
    a := new(int)
    ss := reflect.ValueOf(t).FieldByName("b").Set(a)
}
Run Code Online (Sandbox Code Playgroud)
type t struct {
    b *int
}

func main() {
    t := new(ts)
    a := new(int)
    ss := reflect.ValueOf(t).FieldByName("b").SetPointer(a)
}

Run Code Online (Sandbox Code Playgroud)

第一个代码: =======> ./test.go:14:50: 无法使用 (type *int) 作为reflect.ValueOf(t).FieldByName("b") 参数中的reflect.Value 类型.Set ./test.go:14:50:reflect.ValueOf(t).FieldByName("b").Set(a) 用作值

第二个代码: =======> ./test.go:14:57:不能使用 (type *int) 作为参数中的类型 unsafe.Pointer 到reflect.ValueOf(t).FieldByName("b") .SetPointer ./test.go:14:57:reflect.ValueOf(t).FieldByName("b").SetPointer(a) 用作值

我想使用 Reflect 来使指针字段(名称“b”)分配一个空间并设置一个值。

go reflect

2
推荐指数
1
解决办法
4944
查看次数

恐慌:反映:在接口值上调用reflect.Value.FieldByName

我有一个类型的变量,interface{}我想使用反射更改字段的值。我该怎么做?interface{}由于其他要求,变量必须属于类型。如果变量不是interface{}所有工作类型,否则代码抛出

reflect: call of reflect.Value.FieldByName on interface Value
Run Code Online (Sandbox Code Playgroud)

我的代码

package main

import (
    "fmt"
    "reflect"
)

func main() {
    a := struct {
        Name string
    }{}

    // works
    reflect.ValueOf(&a).Elem().FieldByName("Name").SetString("Hello")
    fmt.Printf("%#v\n", a)

    var b interface{}
    b = struct {
        Name string
    }{}
    // panics
    reflect.ValueOf(&b).Elem().FieldByName("Name").SetString("Hello")
    fmt.Printf("%#v\n", b)
}

Run Code Online (Sandbox Code Playgroud)

reflection go reflect

2
推荐指数
1
解决办法
2686
查看次数

通过反射在运行时按名称动态实例化结构

Go 中是否有与 Java 等语言提供的动态类实例化功能等效的东西(注意:为了简洁,这里省略了必要的异常处理逻辑):

Class cls = Class.forName("org.company.domain.User");
Constructor<User> userConstructor = cls.getConstructor();
User user1 = userConstructor.newInstance();
Run Code Online (Sandbox Code Playgroud)

上面的简短 Java 代码片段本质上是通过提供的完全限定的类路径字符串获取对类的引用,然后使用类引用来获取对零参数构造函数(如果存在)的引用,最后使用构造函数来获取对类的实例。

我还没有在 Go 中找到可以实现类似结果的类似机制的示例。更具体地说,Go 中的Reflect包似乎要求调用者已经引用了他们希望实例化的结构类型。这方面的标准习惯用法似乎如下:

reflect.New(reflect.TypeOf(domain.User))
Run Code Online (Sandbox Code Playgroud)

注意:提供给reflect.TypeOf函数的参数必须是Type 而不是string。在 Go 中,是否可以通过 Reflect 包仅使用其完全限定名称来实例化结构体?

instantiation go reflect

2
推荐指数
1
解决办法
1619
查看次数