今、私はplay2.2.1を使用していますが、私はJavaを知っていますが、Scalaについてはわかりません。 PlayFrameworkについて少しでも学習すれば、Scalaがフレームワークである程度使われていることがわかります。これは私の背景です。問題は、通過する値の数が複数ではないが、Tuple2が以下のコードで使用される理由です。PlayFrameworkでのタプルの役割
これは、コントローラのコードです:
//Action for making a message
public static Result add() {
Form<Message> f = new Form(Message.class);
List<Member> mems = Member.find.select("name").findList();
List<Tuple2<String, String>> opts =
new ArrayList<Tuple2<String, String>>();
for(Member mem: mems) {
opts.add(new Tuple2(mem.name, mem.name));
}
return ok(add.render("fill-in form", f, opts));
}
これは、モデルのコードです:
@Entity
public class Member extends Model {
@OneToMany(cascade = CascadeType.ALL)
public List<Message> messages = new ArrayList<Message>();
@Id
public Long id;
@Required(message = "This item is Required")
public String name;
@Email(message = "Please Fill in a message")
public String mail;
public String tel;
public static Finder<Long, Member> find = new Finder<Long, Member>(Long.class, Member.class);
@Override
public String toString() {
String ids = "{id:";
for (Message m: messages) {
ids += " " + m.id;
}
ids += "}";
return ("[id:" + id + ", message:" + ids + ", name:" + name + ", mail:" + mail + ", tel:" + tel + "]");
}
public static Member findByName(String input) {
return Member.find.where().eq("name", input).findList().get(0);
}
}
これは、ビューのコードです:再び
@(msg:String, form1: Form[models.Message], opts: List[Tuple2[String, String]])
@main("Sample page") {
<h1>ADD MESSAGE</h1>
<p>@msg</p>
@helper.form(action = routes.Application.create) {
@(helper.select (
field = form1("name"),
options = opts
))
@(helper.textarea (
field = form1("message")
))
<input type="submit">
}
}
、なぜTuple2があり、どのコントローラーからビューに1つの値が渡されても2つの文字列値が含まれていますか? ここに示した情報が十分でない場合は、私にコメントをしてください。
「ある程度」ではスカラを使用していません。 Play FrameworkはScalaで書かれており、主にScalaです。また、Java APIも備えています。 'key-value pairs'の最も自然な構造の一つに' tuple'があり、その 'list'は' key-value pairs'のリストのようです。 'opts.add(new Tuple2(mem.name、mem.name))'は、 'opts.add(new Tuple2(" name "、mem.name))' –
であったはずです。私はあなたが言ったように変更しようとしました。それはうまくいく。だから、ここでタプルの最初の議論の意味は何ですか?あなたが示したコードは意味があり説得力があります。しかし、 "opts.add(新しいTuple2(mem.name、mem.name))"も大丈夫ですが、なぜですか?最初の議論は重要な意味を持ちませんか? –
'new Tuple2(" abc "、" def ")'は、 'Tuple2 [String、String]'のインスタンスを作成します。 'Tuple'は' List'や 'Map'のような一般的な構造体です。 'Map [String、String]'を取る。 'Map [String、String]'はそれ自身の意味を持ちません。 'key'でマップされた' values'の所有者です。あなたはそのマップをどのように使用するのでしょうか? –