我在下面声明:
@IBOutlet var hw_label : UILabel!
Run Code Online (Sandbox Code Playgroud)
如果我上面写的比它成功运行,
但是当我声明如下:
@IBOutlet var hw_label : UILabel!
and
hw_label.text = "Hello World"
Run Code Online (Sandbox Code Playgroud)
它显示错误为图像.
我只是想知道'!'之间有什么区别?和'?'.
或者为什么我们要用这个..?
我的代码看起来像:
case class SRecord(trialId: String, private var _max:Int) {
def max=_max
def max_=(value:Int):Unit=_max=value
}
Run Code Online (Sandbox Code Playgroud)
然后我将一个函数应用到它上面:
def groupSummaryRecords(it:Iterator[Option[SRecord]], optionSummary:Option[SRecord]):Option[SRecord] = {
var max=0;
var sRecord1 : Option[SRecord] = None
var i=0
while(it.hasNext) {
var sRecord:Option[SRecord] = it.next();
if(i==0) {
sRecord1 = sRecord;
}
..
}
sRecord1.max=max; // getting 'reassignment to val' compilation error
..
}
Run Code Online (Sandbox Code Playgroud)
为什么我得到这个编译错误,以及如何解决它?
如果我改为将sRecord和sRecord1实例更改为类型SRecord而不是Option[SRecord]方法签名,那么一切正常.
但在某些情况下,我可能有一个空SRecord,因此使用None/Some.我是Scala的新手,Option/Some如果你问我,使用全部感觉真的很痛苦,我只是想删除所有这些Option废话,并在好的Java中测试'null',至少我的代码会工作??!
我想检查一个特定的对象大小是否大于0.如果它大于0然后我想创建一个可选对象,如果没有,那么我想返回一个Optional空.这是java代码的长版本:
if(fooA.size>0) {
return Optional.of(new Foo());
} else {
return Optional.empty();
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用java 8的可选库将其压缩成一行?
我需要根据需要按顺序执行的3个检查来选择第一个结果.即如果没有符合标准1的对象,那么我们寻找满足标准2的任何对象,依此类推.这是我的工作代码
MyClass result = myObjects.stream()
.filter(s -> s.meetsCriterion1())
.findFirst()
.orElseGet(() -> {
return myObjects.stream()
.filter(s -> s.meetsCriterion2())
.findFirst()
.orElseGet(() -> {
return myObjects.stream()
.filter(s -> s.meetsCriterion3())
.findFirst()
.orElseGet(() -> {
return null;
});
});
});
Run Code Online (Sandbox Code Playgroud)
我们可以改进这段代码吗?我不确定是否有办法重用第一个流来评估所有标准.
当我在视图中创建标签(从Object库中拖动)并使IBOutlet连接标签和viewController(Ctrl和拖动)时,Xcode生成的默认代码是,例如,@IBOutlet weak var displayColumn: UILabel!
我可以删除感叹号并将其设置为UILable唯一.但是必须有一个很好的理由Xcode希望它是一个强制解包的可选类型.
问题:我认为我不明白在这里使用可选类型的原因.因为我已经在我的视图中创建了一个标签并将其连接到我的控制器,所以它确实存在,它存在,我创建它.为什么Xcode想要一个选项作为默认类型?如果它说标签内的文字是一个选项,那对我来说听起来很合理,因为标签在运行时的某个时刻可能是空的.
非常感谢
如果谓词失败,如何替换值?
为了显示:
assert_eq!((3-5).but_if(|v| v < 0).then(0), 0)
Run Code Online (Sandbox Code Playgroud)
我以为会有一些东西Option或Result允许这个,但我找不到它.
当我有一个Option并想要一个内部的东西或创建一些东西,如果它是一个None我得到一个错误.
示例代码:
fn main() {
let my_opt: Option<String> = None;
let ref_to_thing = match my_opt {
Some(ref t) => t,
None => &"new thing created".to_owned(),
};
println!("{:?}", ref_to_thing);
}
Run Code Online (Sandbox Code Playgroud)
错误:
error[E0597]: borrowed value does not live long enough
--> src/main.rs:6:18
|
6 | None => &"new thing created".to_owned(),
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-
| | |
| | temporary value dropped here while still borrowed
| temporary value does not live long enough
...
10 | }
| …Run Code Online (Sandbox Code Playgroud) 是否能够将此代码嵌入到Optional方法链中:
Optional<Application> appOpt = this.applicationDao.findById(application.getCode());
Application app = appOpt.orElse(Application::new);
if (!appOpt.isPresent()) {
app.get().setUserCreation("user");
app.get().setTimestampCreation(new Date());
}
Run Code Online (Sandbox Code Playgroud)
我想再次使用前一个appOpt对象.我想将所有这些逻辑嵌入Optional方法链中.
我想应该有另一种更优雅的方式来获得它.
我试过玩,ifPresent但它返回void,所以我无法链接orElse方法:
appOpt.ifPresent(a -> {
a.setUserCreation("userCreation"));
app.setTimestampCreation(new Date());
})
.orElse(Application::new);
Run Code Online (Sandbox Code Playgroud)
我希望我解释得那么好.
有任何想法吗?
我检查的阵列(串)空虚,每天数次,现在我用的isEmpty == true还是isEmpty == false无处不在。不管数组是否可选,这对我来说都是一个好技术,如果数组不是可选的,则有助于更快地读取代码。但是,我很容易错了,这可能是可怕的代码。
所以我只想知道成熟的开发人员如何检查数组?我已经尝试过使用(string ?? "").isEmpty,string?.isEmpty ?? true依此类推。有一些扩展名,例如isNilOrEmpty,但似乎有点难看:c
我有一个对象,我正在通过rest呼叫进行检索。我需要一个对象。
final Optional<A> aResponse = Optional.ofNullable(restTemplate.getForObject(uri, A.class));
在class中A,它B内部有一个类型的对象。无论出于何种原因,此对象都可以为null。
我试图尽可能安全地查询它,以免出现空指针异常。我尝试这样做:
final Optional<B> bType = aResponse.map(A::getB)
.orElseGet(() -> {
return Optional.empty();
});
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用。它发出以下消息:Required B but empty was inferred to Optional<T> no instances.