Curl Global Community
int型→string型のキャストについて - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: int型→string型のキャストについて (/showthread.php?tid=203)



int型→string型のキャストについて - 川上 真太郎 - 08-11-2011

int→stringのキャストについて質問です。

int→stringにキャストする時、

  {(xxx asa int).to-String} 

が使えないことがあります。

この場合、僕はいつも{String xxx asa int}でキャストしてます、、、Confused

 どのような場合、{(xxx asa int).to-String}が効かなくなるんでしょうか?





RE: int型→string型のキャストについて - yosuga - 08-11-2011

僕は int -> String には format などを使いますね。


RE: int型→string型のキャストについて - hokada - 08-11-2011

私は、xxx & ""を使いますね。

ちなみに、formatよりこっちの方が相当高速です。ただ、コードが汚なくなるかもしれないですが・・。

Code:
def xxx:int = 123
def s1 = xxx & ""
def s2 = {format "%d", xxx}
def s3 = {String xxx}
|| s1, s2, s3は一緒の文字列。




RE: int型→string型のキャストについて - fukuta - 08-11-2011

(08-11-2011, 07:18 PM)川上 真太郎 Wrote:  どのような場合、{(xxx asa int).to-String}が効かなくなるんでしょうか?
常にExclamation


RE: int型→string型のキャストについて - 森口 慶紀 - 08-12-2011


int型はクラスではなくプリミティブデータ型なので、メソッドを持っていないですからねSad


RE: int型→string型のキャストについて - nmyzk - 08-17-2011



intからStringへの変換は以下のいずれでも実現可能ですが、
開発のプロジェクトで決めている作法に乗っ取るのが一番いいかと思います。

{format "%d",intValue}

{String intValue}

""&intValue




RE: int型→string型のキャストについて - umemura - 08-27-2013


int 等の数値型以外でも、BigDecimal なども文字列に変換したいことは多いです。
こんなコードを考えてみましたが、DateTime の文字列化のロジックが貧相。

Code:
{import * from COM.CURL.ORB.TYPE}
{import * from CURL.LANGUAGE.REFLECTION}

{define-proc public {get-String c:any}:#String
    let str:#String = null

    {if c isa DateTime then
        set str = (c asa DateTime).info.locale-full
    else
        {type-switch {type-of c}
         case num:NumericType do
            set str = c & ""
         else
            {for m in {({type-of c} asa ClassType).get-members
                          filter = ClassMember.method-filter
                      }
             do
                {switch m.name
                 case  "to-String", "get-text" do
                    set str = {(m asa Method).invoke c} asa #String
                    {break}

                }
            }
        }
    }
    {return str}
}

{CommandButton
    label = "オブジェクトを文字列にする",
    {on Action do
        {popup-message
            {VBox
                {get-String 6 asa int},
                {get-String 6.7 asa double},
                {get-String 'a' asa char},
                {get-String false asa bool},
                {get-String "String"},
                {get-String {DateTime}},
                {get-String {Frame  "Frame内の文字" }},
                {get-String {CTimestamp.value-of "2013-01-01 10:10:10" }},
                {get-String {BigDecimal.from-String "2013" }}

            }
        }
    }
}



RE: int型→string型のキャストについて - umemura - 09-09-2013

to-*** メソッド、 from-*** コンストラクタ が利用できるなら、下記のようなコードも使えるかも。

Code:
{define-proc public {data-to-data-with-type-change
                          to-val:any,
                          from-val:any
                      }:any
    {if-non-null
        to-val, from-val then

        def to-type = {type-of to-val} asa ClassType
        def to-type-name = to-type.name
        def from-type = {type-of from-val} asa ClassType
        def from-type-name = from-type.name


        {if-non-null mtd = {from-type.get-method "to-" & to-type-name} then
            {return {mtd.invoke from-val}}
        }

        {if-non-null cns = {to-type.get-constructor "from-" & from-type-name} then
            {return {cns.new}}
        }
    }
    {return null}
  }

グリッドに入力されたセルの内容を形式チェックする機能を用意していて、
チェックエラー時には、エラーの内容を表示したいので、domain はString にせざるを得ないのですが、
ORB で、送受信するためのDTOの型はBigDecimal なので、
値を詰め替えるときに自動で型を変換できるようにしています。