我正在尝试将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 的例子.
我究竟做错了什么?
我想将一个相当深的 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)
当然,可以实现自定义反序列化,但我想知道是否有默认的方法来实现这一点。
我的应用程序中有两层验证.首先是由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不会非常有用,因为我必须为不同的操作(例如删除和更新)为一个实体制作不同的验证.
所以我正在寻找一种更聪明的方式(模式可能),如果有人能给我一个提示,我将非常感激.
预先感谢!
例如,我有一个房间
public class Room {
private int id;
private Set<User> users;
}
Run Code Online (Sandbox Code Playgroud)
所以我希望它成为我的 websocket 应用程序的端点。但是可能有很多房间,我希望每个房间都有自己的 URI(例如,房间/1、房间/2 等)
显然,@ServerEnpoint 注释只允许常量。那么,有什么办法可以实现吗?
我正在尝试对我的 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)
我如何验证这个确切的角色具有正确的策略?我脑子里的步骤如下:
然而,CDK 似乎没有提供通过元素的逻辑 id 获取元素以及从中获取资源haveResource作为对象的功能。
CDK 进行此类测试的方法是什么?
UPD:似乎我可以用 来接近它StackInspector,尽管我仍然想知道,真正的方法是什么。
我有一个像这样定义的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 -}}.它也是一种管道吗?
先感谢您!
假设我有这个功能:
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()功能,该功能是安全的并且可以正确确定何时退出。
我正在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.
总而言之,哪种解决方案更好 - 具有生成功能或预生成数据?
提前致谢.