Thread Rating:
  • 367 Vote(s) - 2.83 Average
  • 1
  • 2
  • 3
  • 4
  • 5
int型→string型のキャストについて
08-11-2011, 07:18 PM,
#1
Wink  int型→string型のキャストについて
int→stringのキャストについて質問です。

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

  {(xxx asa int).to-String} 

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

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

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


Reply
08-11-2011, 07:57 PM,
#2
RE: int型→string型のキャストについて
僕は int -> String には format などを使いますね。
Reply
08-11-2011, 08:01 PM, (This post was last modified: 08-11-2011, 08:06 PM by hokada.)
#3
RE: int型→string型のキャストについて
私は、xxx & ""を使いますね。

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

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

Reply
08-11-2011, 08:49 PM,
#4
RE: int型→string型のキャストについて
(08-11-2011, 07:18 PM)川上 真太郎 Wrote:  どのような場合、{(xxx asa int).to-String}が効かなくなるんでしょうか?
常にExclamation
Reply
08-12-2011, 08:02 AM, (This post was last modified: 08-12-2011, 08:35 AM by hokada.)
#5
RE: int型→string型のキャストについて

int型はクラスではなくプリミティブデータ型なので、メソッドを持っていないですからねSad
Reply
08-17-2011, 04:38 PM, (This post was last modified: 08-17-2011, 04:39 PM by nmyzk.)
#6
RE: int型→string型のキャストについて


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

{format "%d",intValue}

{String intValue}

""&intValue

Reply
08-27-2013, 06:13 PM,
#7
RE: int型→string型のキャストについて

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" }}

            }
        }
    }
}
Reply
09-09-2013, 04:44 PM,
#8
RE: int型→string型のキャストについて
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 なので、
値を詰め替えるときに自動で型を変換できるようにしています。


Reply

Forum Jump:


Users browsing this thread:
1 Guest(s)