jsk-ros-pkg / geneus

3 stars 16 forks source link

update write_accessors in generate.py for bool #56

Closed Naoki-Hiraoka closed 5 years ago

Naoki-Hiraoka commented 6 years ago

既出でしたら申し訳ありません。

1.irteusgl$ setq a (instance std_msgs::bool :init)
#<std_msgs::bool #X4dc8028>
2.irteusgl$ send a :data
nil
3.irteusgl$ send a :data t
t
4.irteusgl$ send a :data nil 
t
5.irteusgl$ send a :data
t

generate.pyによって作成されるeuslispのコードでは、引数にnilをいれるとデータが変化しない仕様になっており、上記のようにデータをnilに変更することができません。generate.pyによって下記のようなコードが生成されるためです。

(:data
   (&optional __data)
   (if __data (setq _data __data)) _data)

引数にnilを入れてもデータが変化しない仕様にはメリットもありますが、データの型がboolだった場合に限っては、一度trueにすると二度とfalseに戻せなくなってしまうというデメリットが大きいと感じます。データの型がboolだった場合に限り下記のようなコードを生成するようにしたいと思いwrite_accessors関数を書き換えてみたのですが、いかがでしょうか。

(:data
   (&rest __data)
   (if __data (setq _data (car __data))) _data)
k-okada commented 6 years ago

確かに.このパターンは時々あって, https://github.com/jsk-ros-pkg/jsk_robot/blob/master/jsk_baxter_robot/baxtereus/baxter-util.l#L5 みたいに対応しているところが多い気がします.

std_msgs::Bool は時々使うと思うけど,今までどうしていたのかな? @furushchev あたらしくインスタンス使えば,この状況には陥らない,ということなのかな.

furushchev commented 6 years ago

std_msgs::Bool は時々使うと思うけど,今までどうしていたのかな? @furushchev

趣味の違いだと思いますが,僕はいままで,bool型みたいなプリミティブに近い型は送らない使い方をしていたので,問題に思っていませんでした.(気づいてませんでした)

Naoki-Hiraoka commented 6 years ago

お返事ありがとうございます。 https://github.com/euslisp/EusLisp/pull/254 のmerge後になると思いますが、

(:data
   (&optional (__data nil __data_supplied_p))
   (if __data_supplied_p (setq _data __data)) _data)

を使用するバージョンを作成しました。

Naoki-Hiraoka commented 6 years ago

git rebaseしました。勉強になります。

k-okada commented 5 years ago

Thanks for contribution Committed with test code by #61

Closed via #61