这是一个关于理论和更好地理解 ruby 的问题,而不是现实生活中的问题。所以请不要发表类似“永远不要那样做”或类似的评论。
想象一下,我不想使用 I18n.t "token"
,而是想使用:"token".t
。这很容易:
class String
def t
I18n.t self
end
end
想象一下,我对逻辑使用严格的symbols
,对文本使用strings
,并希望通过I18n 逻辑获取每个string
。
如果没有 .t
是否可行?因此 a="john".t #a 在德语中得到 'johann'
与 a="john"
相同
我认为这类似于在创建对象时更改值。
同样,这是一个关于理论和理解 ruby 的问题,而不是一个关于国际化或现实生活的问题。
根据这个thread您不能重新定义字符串文字的初始化,但是您可以使用 alias or alias_method 重新定义 String
初始化并写下类似的内容:
class String
alias_method :old_init, :initialize
def initialize(str)
old_init(str)
puts self
end
end
a = String.new("x")
我是一名优秀的程序员,十分优秀!