Thread Rating:
  • 488 Vote(s) - 2.85 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}が効かなくなるんでしょうか?


08-11-2011, 07:57 PM,
#2
RE: int型→string型のキャストについて
僕は int -> String には format などを使いますね。
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は一緒の文字列。

08-11-2011, 08:49 PM,
#4
RE: int型→string型のキャストについて
(08-11-2011, 07:18 PM)川上 真太郎 Wrote:  どのような場合、{(xxx asa int).to-String}が効かなくなるんでしょうか?
常にExclamation
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
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

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

            }
        }
    }
}
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 なので、
値を詰め替えるときに自動で型を変換できるようにしています。



Forum Jump:


Users browsing this thread:
1 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('203')