小编Rah*_*hul的帖子

Android:Kotlin和Butterknife

我正在尝试将Kotlin和Butterknife用于我的Android应用程序.

这是我的build.gradle

dependencies {
    ...
    compile 'com.jakewharton:butterknife:8.0.1'
    kapt 'com.jakewharton:butterknife-compiler:8.0.1'
}

kapt {
    generateStubs = true
}
Run Code Online (Sandbox Code Playgroud)

我还有一个EditText,我想在更改时使用ButterKnife显示一条消息:

@OnTextChanged(R.id.input)
fun test() {
   toast(1)
}
Run Code Online (Sandbox Code Playgroud)

然而,没有任何反应.我在函数中加了一个断点 - 它甚至都没有执行.

PS:我听说过kotterknife,但是我看到了一个纯粹的Butterknife 的例子.

我究竟做错了什么?

android kotlin butterknife

44
推荐指数
5
解决办法
4万
查看次数

rust serde - 反序列化时展平路径

我想将一个相当深的 JSON 反序列化为 Rust 结构:

{
  "root": {
    "f1": {
      "f2": {
         "f3": 123
       }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

推导时Deserialize,我将不得不创建太多的结构 - 对于上述 JSON 的每个级别一个:

struct Root {
  f1: Field1
}
struct Field1 {
  f2: Field2
}
struct Field3 {
  f3: Field3
}
// ...
Run Code Online (Sandbox Code Playgroud)

有什么方法可以避免拥有这么多的结构。我没有找到任何对派生有帮助的属性。我想要这样的东西:

struct Root {
  // some attr?
  f3: u64
}
Run Code Online (Sandbox Code Playgroud)

当然,可以实现自定义反序列化,但我想知道是否有默认的方法来实现这一点。

json rust serde

12
推荐指数
1
解决办法
1842
查看次数

业务逻辑验证模式和建议

我的应用程序中有两层验证.首先是由bean验证API执行的实体验证(例如必填字段).第二级是业务逻辑验证.例如,用户有一个帖子.用户可以删除帖子,只有他是这篇文章的创建者并且评分<50.所以我必须做这样的事情:

if (post.getCreator().equals(session.getUser())) {
  if (post.getRating() < 50) {
    postRepository.delete(post);
  } else errors.add(400, "Cant delete post with rating 50 or higher")
} else errors add (400, "You should be owner of the post")
Run Code Online (Sandbox Code Playgroud)

我不喜欢这种方式,因为这个条件被重用,我不得不重复代码.此外,如果条件数大于5,则读取和理解代码变得不真实.

此外,标准的Spring Validator不会非常有用,因为我必须为不同的操作(例如删除和更新)为一个实体制作不同的验证.

所以我正在寻找一种更聪明的方式(模式可能),如果有人能给我一个提示,我将非常感激.

预先感谢!

java validation spring design-patterns

9
推荐指数
1
解决办法
6595
查看次数

有没有办法在 Java 中创建动态 @ServerEndpoint 地址?

例如,我有一个房间

public class Room {
   private int id;
   private Set<User> users;
}
Run Code Online (Sandbox Code Playgroud)

所以我希望它成为我的 websocket 应用程序的端点。但是可能有很多房间,我希望每个房间都有自己的 URI(例如,房间/1、房间/2 等)

显然,@ServerEnpoint 注释只允许常量。那么,有什么办法可以实现吗?

java endpoint websocket server

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

AWS CDK 测试参考

我正在尝试对我的 CDK 应用程序进行单元测试。我创建了一个角色,我想确保它已分配所有策略。由于角色和策略是不同的资源,因此 Cloud Formation 角色资源无法提供策略。角色仅具有对策略的引用:

"MyRole4CBCE4C9": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              ...
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Ref": "MyPolicyC18AB378"
          }
        ]
      },
Run Code Online (Sandbox Code Playgroud)

在测试中我有:

expectCDK(stack).to(haveResource("AWS::IAM::Role", {
                AssumeRolePolicyDocument: {
                    Statement: [
                        ...
                    ],
                    Version: "2012-10-17",
                },
            }
        ));
Run Code Online (Sandbox Code Playgroud)

我如何验证这个确切的角色具有正确的策略?我脑子里的步骤如下:

  1. 从角色属性中获取“Ref”
  2. 通过此参考查找政策
  3. 断言策略中的所有必要数据

然而,CDK 似乎没有提供通过元素的逻辑 id 获取元素以及从中获取资源haveResource作为对象的功能。

CDK 进行此类测试的方法是什么?


UPD:似乎我可以用 来接近它StackInspector,尽管我仍然想知道,真正的方法是什么。

unit-testing amazon-web-services aws-cdk

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

golang模板引擎管道

我有一个像这样定义的golang模板

{{- define "test" -}}
{{- printf "%s" .Name | trunc 24 -}}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)

然后我在我的一个文件中使用它:

{{ template "test" . }}
Run Code Online (Sandbox Code Playgroud)

"测试"后点的含义是什么?Golang模板文档说:

{{template "name" pipeline}}
The template with the specified name is executed with dot set
to the value of the pipeline.
Run Code Online (Sandbox Code Playgroud)

但我不确定管道是什么.阅读文档没有结果,任何人都可以再次解释?

另外,为什么我们必须以dot开头的值?例如{{ - printf "%s" .Name | trunc 24 -}}.它也是一种管道吗?

先感谢您!

templates go go-templates

4
推荐指数
1
解决办法
3163
查看次数

编译器是否可以优化递归调用?

假设我有这个功能:

func abc(i int) (e error) {
    defer func() {
        if r := recover(); r != nil {
            abc(i * 2)
        }
    }()

    if someCondition(i) {
      return fmt.Errorf("Some Err");
    }

    return action() // returns err (nil in case of success) or panics
}
Run Code Online (Sandbox Code Playgroud)

这将被视为尾递归调用吗?可以优化编译器,因为可以优化尾递归调用?

我了解以这种方式抑制恐慌不是一个好的决定,而是假定存在正确的condition()功能,该功能是安全的并且可以正确确定何时退出。

tail-recursion go

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

Haskell - 如何避免与IO混淆纯粹

我正在haskell上实现一些算法.该算法需要生成一些数据.

我有一个算法的功能,它将生成函数作为参数.例如,算法只是将输入数据乘以n:

 algo :: a -> ??? -> [a]
 algo n dgf = map (\x -> x * n) $ dgf
Run Code Online (Sandbox Code Playgroud)

dgf用于生成数据.如何正确编写函数头,dgf可以是任何具有任意数量参数的函数?

另一种变体是不接受生成函数但已经生成数据.

algo :: a -> [b] -> [a]
algo n d = (\x -> n*x) d
Run Code Online (Sandbox Code Playgroud)

那么,现在让我们想象一下我stdGen使用IO 生成数据.如何使函数更通用,以便它可以同时接受IO实例和普通值[1,2,3].这也涉及具有功能的变体,因为它也可以产生IO.

总而言之,哪种解决方案更好 - 具有生成功能或预生成数据?

提前致谢.

algorithm monads haskell io-monad

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