2009-09-11 71 views

回答

3

我想你必須在這裏區分一些情況。

在CLR級別,根本沒有問題。 CLR允許在類型和成員名稱中包含比通常可用於大多數語言(如C#和VB.Net)更大的一組字符。例如,在CLR級別包含撇號是合法的。

實際上,如果您查看ECMA CLI規範的第8.5.1節,它並未明確限制字符集。它只是表示應該如何比較。

要考慮的另一個問題是名稱是如何寫入IL的。在寫出程序集並從磁盤讀取程序集時將IronRuby添加回來時,IronRuby並沒有阻止簡單排除感嘆號。這種類型的映射是由其他語言完成的,將醜陋的名字變成有效的名字。例如,如果您在IL級別查看List<T>,那麼它實際上被寫爲List`1。

我並不是說IronRuby會做這些映射,只是說它可能會這樣做。我實際上並不熟悉Ruby作爲一種語言。

至於它們是如何從VB.Net和C#中消耗的。幸運的是,兩種語言都可以選擇DLR與原始IronPython和IronRuby交互。這使得語言編寫者可以靈活地將他們的成員展示給其他語言,並允許另一個可以將成員名稱映射到其內部表示的層。

1

從C#或VB.NET,您必須使用DLR託管接口來訪問這些方法,使用方法名稱作爲字符串。來自這些語言的新「動態」語法不會覆蓋其有效方法標識符的正常詞法規則。