第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

'eval'應(yīng)該是討厭的嗎?

'eval'應(yīng)該是討厭的嗎?

Qyouu 2019-09-03 17:12:07
我多次使用eval紅寶石的功能。但我聽說有人說evals很討厭。當(dāng)被問到為什么以及如何,我永遠(yuǎn)無法得到令人信服的理由不使用它。他們真的很討厭嗎?如果是,以什么方式?評(píng)估有哪些“更安全”的選擇?
查看完整描述

3 回答

?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊

在Ruby中,有幾個(gè)噱頭可能比eval()以下更合適:

  1. #send一個(gè)允許您調(diào)用一個(gè)名稱為字符串并將參數(shù)傳遞給它的方法。

  2. yield 允許您將代碼塊傳遞給將在接收方法的上下文中執(zhí)行的方法。

  3. 通常,簡(jiǎn)單Kernel.const_get("String")就足以獲得您的名稱為字符串的類。

我想我無法詳細(xì)解釋它們,所以我只是給了你提示,如果你有興趣,你會(huì)谷歌。


查看完整回答
反對(duì) 回復(fù) 2019-09-03
?
12345678_0001

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

eval不僅不安全(正如其他地方所指出的那樣),它也很慢。每次執(zhí)行時(shí),evaled代碼的AST都需要重新解析(對(duì)于例如JRuby,轉(zhuǎn)向字節(jié)碼),這是一個(gè)字符串繁重的操作,也可能對(duì)緩存局部性有害(假設(shè)正在運(yùn)行)程序不是eval很多,因此解釋器的相應(yīng)部分因此緩存冷,除了很大)。


eval你問,為什么在Ruby中根本沒有?“因?yàn)槲覀兛梢浴贝蠖鄶?shù) - 事實(shí)上,當(dāng)eval發(fā)明時(shí)(對(duì)于LISP編程語(yǔ)言),它主要用于表演!更重要的eval是,當(dāng)您想要“將解釋器添加到解釋器中”時(shí),使用正確的東西,用于元編程任務(wù),例如編寫預(yù)處理器,調(diào)試器或模板引擎。這類應(yīng)用程序的常見想法是按摩一些Ruby代碼并調(diào)用eval它,它肯定會(huì)重新發(fā)明并實(shí)現(xiàn)特定于域的玩具語(yǔ)言,這也是一個(gè)陷阱,也被稱為Greenspun的第十條規(guī)則。需要注意的是:注意成本,例如對(duì)于模板引擎,eval在啟動(dòng)時(shí)進(jìn)行所有操作而不是運(yùn)行時(shí)間; 并且不eval不可信代碼,除非你知道如何“馴服”它,即根據(jù)能力規(guī)則理論選擇并強(qiáng)制執(zhí)行語(yǔ)言的安全子集。后者是很多非常困難的工作(例如,看看Java是如何完成的 ;我不知道Ruby的任何這樣的努力)。


查看完整回答
反對(duì) 回復(fù) 2019-09-03
  • 3 回答
  • 0 關(guān)注
  • 553 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)